Biểu thức chính quy (Regular Expression) trong PHP
- 22-02-2023
- Toanngo92
- 0 Comments
Mục lục
Biểu thức chính quy
Có thể chúng ta sẽ thấy biểu thức chính quy còn được gọi là regex, biểu thức chính quy là một chuỗi các ký tự mô tả một mẫu tìm kiếm cụ thể ở dạng chuỗi văn bản. Chúng được sử dụng phổ biến trong các thuật toán lập trình nhằm vào các tác vụ cụ thể. Biểu thức chính quy tìm nạp các chuỗi bắt buộc dựa trên mẫu đã xác định.
Biểu thức chính quy được sử dụng để thực hiện tất cả các loại hoạt động tìm kiếm và thay thế văn bản. Chúng là một cách nhỏ gọn để mô tả các mẫu chuỗi phù hợp với một lượng văn bản cụ thể. Biểu thức chính quy là các chuỗi bao gồm các dấu phân cách, mẫu và các công cụ sửa đổi tùy chọn. Cú pháp được sử dụng là $exp = “/hello/i”;. Ở đây, dấu phân cách là /, hello là mẫu đang được tìm kiếm (pattern) và i là công cụ sửa đổi/bổ từ (modifier) làm cho tìm kiếm không phân biệt chữ hoa chữ thường.
Bất kỳ ký tự nào ngoại trừ bảng chữ cái, số, dấu gạch chéo ngược hoặc dấu cách đều có thể là dấu phân cách. Dấu phân cách phổ biến được sử dụng phổ biến nhất là dấu gạch chéo lên phía trước (/). Tuy nhiên, nếu bản thân mẫu chứa dấu gạch chéo lên (\), thì người ta có thể chọn bất kỳ ký tự nào khác làm dấu phân cách, chẳng hạn như # hoặc ~.
Có 2 loại biểu thức chính quy:
- POXIS Regex
- PERL Regex(PERL Compatible Regular Expression – PCRE)
Portable Operating System Interface for uniX (POSIX) là tập hợp các tiêu chuẩn được sử dụng để xác định một số chức năng cần được hỗ trợ bởi hệ điều hành UNIX. Một tiêu chuẩn như vậy xác định hai loại biểu thức chính quy. Biểu thức chính quy POSIX chỉ được sử dụng với dữ liệu văn bản. Nếu dữ liệu chứa NUL-byte (\x00), thì biểu thức chính quy sẽ hiểu rằng đó là phần cuối của chuỗi và việc so khớp sẽ không xảy ra sau điểm đó.
Cấu trúc của biểu thức chính quy POSIX gần giống với biểu thức số học, Nhiều phần tử kết hợp và tạo thành các biểu thức rất phức tạp. Bất kỳ biểu thức nào khớp với một ký tự là biểu thức chính quy đơn giản nhất.
Dấu ngoặc vuông ([ ]) có thể được sử dụng để tìm một dãy ký tự. Ví dụ: nếu tìm thấy một kết quả khớp cho bất kỳ chữ số nào trong khoảng từ 0 đến 9, thì biểu thức là [0-9]. Để khớp ký tự chữ thường giữa a và z, hãy sử dụng biểu thức [a-z]. Để khớp một ký tự giữa chữ hoa A và chữ hoa Z, hãy sử dụng biểu thức [a-z]. Để tìm một ký tự khớp giữa chữ thường a và chữ hoa Z, hãy sử dụng biểu thức [a-Z].
Các hàm Regexp POSIX của PHP
- ereg(): Sử dụng chức năng này, tìm kiếm một chuỗi cho một mẫu.
- ereg_replace(): Hàm này giúp tìm kiếm một mẫu và nếu tìm thấy thì
thay thế nó bằng sự thay thế mong muốn. - eregi(): Hàm không phân biệt chữ hoa chữ thường này, tìm kiếm một chuỗi được chỉ định chuỗi trong suốt một chuỗi được chỉ định theo mẫu.
- eregi_replace(): Chức năng này hoạt động tương tự như creg replace(). Tuy nhiên, đây không phải là trường hợp nhạy cảm.
- split(): Hàm này giúp chia một chuỗi thành nhiều phần tử khác nhau. Các ranh giới cho từng phần tử dựa trên cách mẫu chuỗi xảy ra.
- splici(): Chức năng không phân biệt chữ hoa chữ thường này tương tự như hàm spit().
- squi_regcase(): Hàm này giúp chuyển đổi tham số đầu vào ký tự của chuỗi thành một biểu thức trong ngoặc có chứa hai ký tự.
Tuy nhiên, thời điểm hiện tại các hàm này hiện tại trên offical docs php đã outdate, chỉ sử dụng được cho PHP 5 nên chúng ta sử dụng các hàm PERL Compatible Regular Expression như sau:
- preg_filter() – thực hiện tìm kiếm những kết quả theo biểu thức chính quy và thay thế
- preg_grep() – trả về mảng các kết quả mà match với pattern
- preg_last_error() – trả về lỗi code của lần thực thi regex PCRE cuối cùng
- preg_match() && preg_match_all() – thực thi khớp với biểu thức chính quy.
- preg_quote() – đặt dấu gach chéo ngược trước mỗi ký tự là ký tự đặc biệt trong biểu thức chính quy trong chuỗi đầu vào
- preg_replace() – thực thi tìm kiếm những phần tử nào mà khớp với biểu thức chính quy và thay thế nó với chuỗi mà ta cần.
- preg_replace_callback() – thực thi tìm kiếm những phần tử nào mà khớp với biểu thức chính quy và thay thế nó với chuỗi mà ta cần và sau đó kết quả sẽ dùng để thực hiện 1 hàm callback khác. Kết quả cuối cùng trả về là input sau khi đã replace và đi qua hàm callback đó.
- preg_split() – chia chuỗi bằng biểu thức chính quy
Ví dụ hàm preg_match():
<?php
$email = "abc@gmail.com";
if (preg_match("/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/", $email)) {
echo "Valid email address: $email";
} else {
echo "Invalid email address: $email";
}
Xem thêm tại offical docs PHP: https://www.php.net/manual/en/book.pcre.php