Hướng dẫn dùng matches regex trong PHP
Regular expression là một nhóm của các ký tự được dùng để tìm ra một pattern cụ thể nào đó trong một hay một vài câu hay đoạn text. Bạn có thể gọi chúng là Show
1 Biểu thức chính quy là gì ?
Hãy tưởng tượng rằng bạn đang viết một chương trình và bạn muốn set những rules cho iệc khi user lựa chọn username. Bạn muốn cho phép user chứa những chữ cái, những con số, gạc dưới (), hay là dấu gạch ngang (-). Bạn cũng muốn giới hạn số lượng những ký tự trong username. Bạn sử dụng biểu thức chính quy dưới đây để validate theo yêu cầu vừa đặt ra nhé
Biểu thức chính quy ở trên có thể chấp nhận các chuỗi sau: 2.Ví dụ cơ bảnBiểu thức chính quy là một mẫu các ký tự mà bạn có thể sử dụng để thực hiện tìm kiếm trong một đoạn văn bản. Ví dụ, biểu thức chính quy Hoang => Nguyen Minh Hoang Biểu thức chính quy Hoang => Nguyen hoang Minh Hoang 3.Meta CharactersMeta Character ở đây ý muốn nói là thay vì các bạn cố định biểu thức chính quy cụ thể như
3.1 Match với một ký tự bất kỳTrong biểu thức chính quy khi chúng ta sử dụng ký tự .g => nguyên nguyền nguyến nguyển nguyện 3.2 Character setCharacter sets được gọi là nhóm các ký tự. Cặp ngoặc vuông được dùng để chỉ ra những ký tự nào được so khớp. Thứ tự so khớp của các ký tự trong cặp dấu ngoặc vuông này các bạn không cần quan tâm. Ví dụ, ta có biếu thức chính quy như sau [Nn]guyen => Nguyen nguyen Minh Hoang et[.] => Day la dau cham het. 3.2.1 Negated character setNhư ta đã biết ký tự [^c]\oi => Dong doi la phai biet nguon coi cua nhau. 3.3 Repetitions
3.3.1 *
[a-z]* => Nguyen minh hoang sinh nam bao nhieu.
\s*em\s* => Khi doi moi em con do mong, an kem truoc cong 3.3.2 +
u.+n => Chung ta uon luon tuon cuon 3.3.3 ?
[N]?hieu => Nhieu nguoi cho rang hieu nhau chua phai la du 3.4 Braces {}Trong biểu thức chính quy
Chúng ta có thể lấy ra nhiều hơn 3 ký tự bằng cách như sau
Hoặc lấy đúng 2 ký tự số
3.5 Capturing valueCapturing value là một nhóm các pattern nhỏ hơn được đặt trong dấu (ng|th)uyen => nguyen nhan dan den thuyen bi lat la song to ([a-z]+)([0-9]+) => hoang0607 3.6 AlternationTrong biểu thức chính quy, thì (C|c)hung|ta => Chung ta la mot gia dinh, bọn chung khong phai gia dinh 3.7 Special CharacterKhi chúng ta muốn sử dụng các ký tự đặc trong đoạn regex (g|c|m)a\. => ga an ca, cho an ga, cho can ma. 3.8 Anchors ^, $Trong lập trình
chúng ta muốn kiểm tra xem hai biến có chính xác bằng nhau hay không thì chúng ta chỉ cần so sánh 3.8.1 Anchor ^Mình sẽ lấy 2 ví dụ để giải thích cho bạn nhé uyen => nguyen uyen trong
trường hợp này thì các bạn thấy đấy nó sẽ match với tất cả những từ có ^uyen => nguyen uyen
3.8.2 Anchor $Mình cũng sẽ lấy 2 ví dụ để giải thích cho bạn uyen. => nguyen uyen. Nhưng khi các bạn thêm uyen.$ => nguyen uyen uyen. Ý là bắt buộc sau ký tự 4. Shorthand and Character SetsBiểu thức chính quy mang tới syntax ngắn mà thuận tiện hơn trong việc chúng ta viết các biểu thức regex.
5. LookaroundLookaround được chia làm 2 loại đó là lookahead và lookbehind. Nó dùng để kiểm tra điều kiện ở phía trước hoặc phía sau pattern đứng trước hoặc sau nó. Lookahead được sử dụng khi chúng ta có điều kiện pattern này được đi trước pattern khác. Ví dụ, bạn muốn lấy tất cả các số trước đó là ký tự (?<=$)[0-9.]* => $1.67 $1.02 5.1 Positive Lookahead (?=)Ví dụ bạn
muốn lấy ra tất cả những user đứng sau là '/[^\s]+([email protected])/' => nguyenminhoang@gmail.com [email protected] ý ở đây sẽ là chỉ lấy những chuỗi đầu vào nào mà có đuôi 5.2 Negative Lookahead (?!)Nó là ngược lại của 5.3 Positive LookbehindMình sẽ lấy ví dụ để bạn hiểu rõ hơn nhé. Bạn muốn regex những email có phần đầu là (?<=nguyenminhhoang)@[^,]+ => nguyenminhhoang**@gmail.com** nguyenminhhoang**@yahoo.com** [email protected]framgia.com 5.4 Negative LookbehindNgược lại với Positive ở bên trên thì đó chính là
Negative. Các bạn muốn lấy phần đuôi của email không phải của (? thì trong những chuôi 6. Flag
6.1 Case intensive (i)Ví dụ ta có biểu thức chính quy như sau Nguyen => Nguyen minh nguyen /Nguyen/gi => Nguyen minh nguyen Cái flag này các bạn lưu ý để dùng trong các engine online có sẵn nhé, tùy thuộc các bạn chọn flag nào mà kết quả match regex nó sẽ khác nhau. 6.2 Global search (g)
/.(a)n/ => Con ngan danh dan ta lung /.(a)n/g => Con ngan danh dan ta lung 6.3 Multiline (m)
7. Kết luậnVậy qua một vài những điều mình chia sẻ ở trên mong rằng một phân nào các bạn cũng hiểu hơn về biểu thức chính quy. Bài chia sẻ tiếp theo mình sẽ đi tìm hiểu một số hàm dùng với biểu thức chính quy và một số các ví dụ nhé. Cảm ơn các bạn đã đọc bài chia sẻ của mình. 8. Tham khảohttps://www.regular-expressions.info/ |