Bài 02: Các quy tắc Regular Expression căn bản

Regular Expression 05/02/2017 03:44 1086
Trong bài trước tôi đã trình bày Regular Expression là gì? Trong bài viết này tôi sẽ đào sâu hơn về các khái niệm cơ bản được sử dụng trong Regular Expression.

1. Khai báo chuỗi RegEx

Cú pháp: /pattern/modifiers;

Trong đó:

  • pattern: Là một tập các quy tắc được viết ra để quy định, kiểm tra các chuỗi kí tự khác.
  • modifiers: Được sử dụng để thực hiện tìm kiếm case-insensitive và toàn cục.

Ví dụ:

$pattern = '/chiasephp\.net/i'

1.1 Modifier trong PHP

ModifierMiêu tả
iThực hiện hành động so khớp là không phân biệt kiểu chữ
gTìm kiếm toàn cục (global) cho mọi so khớp
mXác định rằng nếu chuỗi có các ký tự newline (dòng mới) hoặc carriage return, thì các toán tử ^ và $ sẽ so khớp


1.2 Dấu ngoặc vuông []

Các dấu ngoặc vuông ([]) có ý nghĩa đặc biệt khi được sử dụng trong ngữ cảnh của các Regular Expression. Chúng được sử dụng để tìm một dãy ký tự.

ExpressionMiêu tả
[0-9]Nó so khớp với bất kỳ chữ số thập phân nào từ 0 tới 9
[a-z]Nó so khớp với bất kỳ ký tự chữ thường từ a tới z
[A-Z]Nó so khớp với bất kỳ ký tự chữ hoa từ A tới Z
[a-Z]Nó so khớp với bất kỳ ký tự từ chữ thường a tới chữ hoa Z

 

1.3 Ký tự meta trong PHP

Về cơ bản, một ký tự meta là một ký tự chữ cái được đặt trước bởi một dấu chéo ngược để tạo thành một tổ hợp có ý nghĩa đặc biệt.

Ví dụ, bạn có thể tim kiếm các tổng lượng tiền lớn bởi sử dụng ký tự meta là '\d': /([\d]+)000/, ở đây \d tìm kiếm bất kỳ chuỗi ký tự số nào.

Dưới đây là danh sách các ký tự meta có thể được sử dụng Regular expression.

Ký tựMiêu tả
.Một ký tự đơn(Dấu chấm là ký tự đặc biệt trong regex nên phải thêm dấu \ để sử dụng dấu \.)
^Chuỗi kí tự bắt đầu bởi
$Chuỗi kí tự kết thúc bởi
+Lặp lại ký tự hay cụm ký tự ít nhất một hoặc nhiều lần
*Lặp lại ký tự hay cụm ký tự ít nhất không hoặc nhiều lần
\s Một ký tự khoảng trắng (space, tab, newline (dòng mới))
\S Ký tự không phải là khoảng trắng
\d Một chữ số (0-9)
\D Không phải là chữ số
\w Một ký tự từ (a-z, A-Z, 0-9, _)
\WKhông phải là ký tự từ
[aeiou]So khớp với một ký tự đơn trong tập đã cho
[^aeiou]So khớp với một ký tự đơn bên ngoài tập đã cho
(foo|bar|baz)So khớp với bất kỳ ký tự nào đã cho

 

1.4 Quantifier trong PHP

Tần suất và vị trí của dãy ký tự hoặc một ký tự đơn được bao trong dấu ngoặc vuông có thể được diễn tả bởi một ký tự đặc biệt. Mỗi ký tự đặc biệt có một ý nghĩa cụ thể. Các +, *, ?, {int. range}, và $ theo sau một dãy ký tự.

ExpressionMiêu tả
p+Nó so khớp với bất kỳ chuỗi nào chứa ít nhất một p
p*Nó so khớp với bất kỳ chuỗi nào chứa ít nhất một p
p?Nó so khớp với bất kỳ chuỗi nào chứa 0 hoặc nhiều p. Đây là sự thay thế cho việc sử dụng p*
p{N}Nó so khớp với bất kỳ chuỗi nào chứa một dãy gồm N p
p{2,3}Nó so khớp với bất kỳ chuỗi nào chứa 2 hoặc 3 p
p{2, }Nó so khớp với bất kỳ chuỗi nào chứa ít nhất 2 p
p$Nó so khớp với bất kỳ chuỗi nào với p ở vị trí cuối của nó
^pNó so khớp với bất kỳ chuỗi nào với p ở vị trí đầu của nó

1.5 Dãy ký tự được định nghĩa trước trong PHP

Giúp bạn tiện lợi hơn trong khi lập trình, một số dãy ký tự được định nghĩa trước, mà còn được biết đến như là các lớp Character, là có sẵn cho bạn. Các lớp Character xác định một dãy toàn bộ các ký tự, ví dụ: bộ chữ cái hoặc một tập hợp integer.

ExpressionMiêu tả
[[:alpha:]]Nó so khớp với bất kỳ chuỗi nào chứa các ký tự chữ cái aA tới zZ
[[:digit:]]Nó so khớp với bất kỳ chuỗi nào chứa các chữ số từ 0 tới 9
[[:alnum:]]Nó so khớp với bất kỳ chuỗi nào chứa các ký tự chữ-số từ aA tới zZ và từ 0 tới 9
[[:space:]]Nó so khớp với bất kỳ chuỗi nào chứa một space

2. Tổng kết

Trên đây mình đã tổng hợp một số quy tắc cơ bản được sử dụng nhiều nhất trong Regular Expression. Trong các bài tiếp theo mình sẽ hướng dẫn các bạn một cách chi tiết áp dụng các quy tắc cơ bản này.

Xem Thêm

Profile photo of adminTheHalfHeart

B.V.T

Sinh ra và lớn nên ở Bắc Giang. Hiện tại thì tôi đang là một lập trình viên tại VietISO. Tôi lập website này với mục đích là bookmark những gì tôi đã đọc qua và mong muốn chia sẻ những gì tôi biết.