Trong một bài viết về Preg_match_all mình có nhắc đến biểu thức chính quy Regular Expression. Trong bài này chúng ta sẽ cùng tìm hiểu rõ hơn về biểu thức chính quy và cách sử dụng như thế nào.
Regex là gì?
Regex (hoặc RegExp) là viết tắt của Biểu thức chính quy Regular Expression, là cách nhanh chóng và hiệu quả để khớp các mẫu bên trong một chuỗi. Trong bài viết này, chúng ta sẽ tìm hiểu về cách tạo các biểu thức chính quy và cách sử dụng chúng trong các hàm PHP.
Bạn sẽ thường gặp xây dựng các chức năng như tìm kiếm văn bản, tìm kiếm và thay thế văn bản, xác thực đầu vào , vv…
Thực hành với biểu thức chính quy
Một chuỗi Regex được bắt đầu bằng ký tự “/” và kết thúc cũng bới ký tự “/“.
Xem ví dụ sau:
<?php $string = "Đây là bài học về regex. Bài viết được cập nhật tại https://quynhweb.pro/"; preg_match_all( "/[http]/",$string, $matches ); var_dump('<pre>'); print_r($matches); var_dump('</pre>');
Các ký tự Meta thường dùng
[abc] | Khớp với bất cứ ký tự được chứa giữa cặp ngoặc vuông này |
[^abc] | Khớp với bất kỳ ký tự nào không phải là một trong các ký tự tùy chọn trong cặp dấu ngoặc. |
[0-9] | Khớp một ký tự trong phạm vi 0 – 9 |
^ | Tìm kết quả khớp ở đầu chuỗi. |
| | Tìm khớp chuỗi này hoặc chuỗi kia |
$ | Tìm kết quả khớp ở cuối chuỗi. |
? | Khớp một mẫu 0 hoặc 1 lần |
b | Khớp ở đầu một từ hoặc cuối một từ. |
* | Khớp một mẫu 0 hoặc nhiều lần |
+ | Khớp một mẫu 1 hoặc nhiều lần |
() | Xác định một mẫu phụ |
{} | Xác định một mẫu lặp lại |
– | Khớp một loạt các ký tự |
Sử dụng dấu gạch chéo ngược để thoát khởi ký tự đặc biệt |
Nhìn vào bảng trên bạn có thể viết ra một mẫu khớp để thực hành ngay.
Ví dụ tìm số 9 ở trong chuỗi
Một số ví dụ khớp chuỗi
Khớp URL:
/b(?:(?:https?|ftp)://|www.)[-a-z0-9+&@#/%?=~_|!:,.;]*[-a-z0-9+&@#/%=~_|]/i
Khớp Email:
/[email protected]S+.S+/
Khớp điện thoại:
/(03|05|07|08|09|01[2|6|8|9])+([0-9]{8})b/
Khớp tên tiếng Việt:
/((Đại diện pháp luật:)s?([a-z0-9A-Z_uùúủũụUÙÚỦŨỤưừứửữựƯỪỨỬỮỰeèéẻẽẹêềếểễệEÈÉẺẼẸÊỀẾỂỄỆaàáảãạAÀÁẢÃẠăằắẳẵặâầấẩẫậĂẰẮẲẴẶÂẦẤẨẪẬoòóỏõọOÒÓỎÕỌơờớởỡợƠỜỚỞỠỢôồốổỗộÔỒỐỔỖỘiìíỉĩịIÌÍỈĨỊyỳýỷỹỵYỲÝỶỸỴđĐ]|s)*(?!(<br>)))/
Khớp thẻ HTML:
/^<([a-z]+)([^<]+)*(?:>(.*)</1>|s+/>)$/
Để thực hành bạn hãy vào https://regex101.com/ viết mã Regex sau đó copy một đoạn văn bản để test.
Kết luận: Với bài viết về biểu thức chính quy Regex đã đã thực sự biết cách sử dụng chưa? Hãy thử tập viết một vài mẫu để validate hay tìm một cụm từ xem thế nào nhé. Chúc bạn học tốt!