Categories PHP-MySQL

Thực hành RegEx cơ bản trong PHP

Chúng ta đã tìm hiểu cú pháp cơ bản của RegEx trong bài viết này, hôm nay tôi và các bạn sẽ tìm hiểu việc áp dụng nó trong PHP.

Tài liệu tham khảo dễ hiểu là W3School và các tài liệu khác tôi tìm thấy trên mạng.

Trong phần đầu W3School định nghĩa Regular Expression (biểu thức chính quy) như thế này:

Regex là một chuỗi các ký tự tạo thành mẫu tìm kiếm. Khi bạn tìm kiếm dữ liệu trong một văn bản (text), bạn có thể sử dụng mẫu tìm kiếm để mô tả bạn muốn tìm kiếm điều gì.

Regex có thể là một ký tự hoặc một mẫu phức tạp hơn.

Regex có thể được dùng để thực hiện tất cả các kiểu tìm kiếm văn bản và thay thế văn bản.


#1. Cú pháp

Trong PHP thì Regex là một chuỗi được tạo thành từ dấu phân cách, mẫu tìm kiếm và các tùy chọn khác. Ví dụ:

$exp = "/regex/i"

Trong ví dụ trên, / là dấu phân cách, regex là mẫu tìm kiếm, và i là tùy chọn dùng để tìm kiếm không phân biệt chữ HOA chữ thường (case-insensitive).

Dấu phân cách có thể là bất kỳ ký tự nào, nhưng không được phép là chữ cái (a, b, c,…, x, y, z), số (0, 1, 2 ,…9), dấu gạch ngược (\) hoặc khoảng trắng. Dấu phân cách phổ biến nhất là dấu gạch xuôi (/), tuy nhiên nếu mẫu tìm kiếm của bạn bao gồm dấu gạch xuôi thì sẽ tiện lợi hơn nếu bạn chọn dấu phân cách khác, chẳng hạn như # hoặc ~.


#2. Các hàm Regular Expression

PHP cung cấp đa dạng các hàm cho phép bạn sử dụng biểu thức chính quy, trong đó các hàm preg_match(), preg_match_all()preg_repalace() là một trong các hàm được sử dụng nhiều nhất.

Hàm Mô tả
preg_match() Trả về kết quả 1 nếu mẫu được tìm thấy trong chuỗi, trả về kết quả 0 nếu không tìm thấy
preg_match_all() Trả về số lần mẫu tìm kiếm được tìm thấy trong chuỗi, nếu không tìm thấy, kết quả cũng là 0
preg_replace() Trả về chuỗi mới khi mẫu khớp với chuỗi mà bạn muốn thay thế

#3. Cách sử dụng preg_match()

Hàm preg_match() sẽ nói cho bạn biết liệu rằng mẫu có nằm trong chuỗi hay không.

Ví dụ sử dụng regex để tìm kiếm mẫu “nguyễn” không phân biệt hoa thường trong chuỗi:

$str = "Nguyễn Đức Anh";
$pattern = "/nguyễn/i";
echo preg_match($pattern, $str); // Kết quả là 1

#4. Cách sử dụng preg_replace()

Hàm preg_replace sẽ giúp bạn thay thế tất cả mẫu bằng một chuỗi khác mà bạn muốn.

Ví dụ tôi muốn thay thế từ sai chính tả nguyeen thành nguyễn:

$str="nguyeen đức anh";
$mtk="#nguyeen#"; // tôi sử dụng # làm dấu phân cách trong mẫu tìm kiếm này
$tt="nguyễn";
echo preg_replace($mtk,$tt,$str); // kết quả là nguyễn đức anh

#5. Cách sử dụng preg_match_all()

Hàm preg_match_all sẽ nói cho bạn biết có bao nhiêu lần mẫu tìm kiếm được tìm thấy trong chuỗi.

Ví dụ tôi cần đếm số lần ký tự n xuất hiện trong một tên nào đấy, không phân biệt nó là hoa hay thường:

$str="Nguyễn Đức Anh";
$mtk="/n/i";
echo preg_match_all($mtk, $str); // kết quả sẽ là 3

#6. Các tùy chọn điều chỉnh trong Regex

Các tùy chọn điều chỉnh được dùng để yêu cầu một câu lệnh tìm kiếm thực hiện một kiểu tìm kiếm nhất định.

Các tùy chọn Mô tả
i Thực hiện tìm kiếm không phân biệt chữ hoa, chữ thường
m Thực hiện tìm kiếm nhiều dòng (các mẫu tìm kiếm phần đầu hoặc phần cuối của một chuỗi sẽ khớp với phần đầu hoặc phần cuối của mỗi dòng)
u Cho phép đối sánh chính xác mẫu UTF-8
Back to Top