Web Cơ Bản

Cách sử dụng biểu thức chính quy (RegEx) trong PHP

Biểu thức chính quy là gì ?

- Biểu thức chính quy (Regular Expression, viết tắt là RegEx) là một chuỗi các ký tự tạo thành một “mẫu tìm kiếm”, khi tìm kiếm nội dung trong một đoạn văn bản, bạn có thể sử dụng “mẫu tìm kiếm” này để mô tả nội dung mà bạn đang cần tìm.

- Biểu thức chính quy có thể là một ký tự, hoặc một mẫu phức tạp hơn.

- Biểu thức chính quy thường được áp dụng trong các công việc tìm kiếm văn bản, thay thế văn bản.

Cú pháp cơ bản của một biểu thức chính quy

- Trong PHP, “biểu thức chính quy” là một chuỗi bao gồm các thành phần chính là: các dấu phân cách, một mẫu, các bổ ngữ tùy chọn.

$exp = "/bieuthucchinhquy/i";

- Trong ví dụ trên, / là dấu phân cách, bieuthucchinhquy là mẫu đang được tìm kiếm, i là một bổ ngữ dùng để ám chỉ việc tìm kiếm không phân biệt trường hợp chữ in hoa hay chữ thường.

- DẤU PHÂN CÁCH có thể là bất kỳ ký tự nào không phải là chữ cái, chữ số, dấu cách (dấu khoảng trắng), dấu gạch chéo ngược \. Dấu phân cách được sử dụng phổ biến nhất là dấu gạch chéo /, nhưng khi mẫu của bạn có chứa dấu gạch chéo thì bạn nên chọn các dấu phân cách khác như # hoặc ~ để thay thế.

Các bổ ngữ được áp dụng trong biểu thức chính quy

- Các “bổ nghĩa” dùng để mô tả thêm cách thức tìm kiếm trong chuỗi.

- Dưới đây là ba loại bổ ngữ thường được áp dụng trong biểu thức chính quy.

i - Thực hiện tìm kiếm không phân biệt chữ in hoa hay 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 các mẫu được mã hóa UTF-8.

Các hàm biểu thức chính quy

- Dưới đây là bảng mô tả sơ lược chức năng của một số hàm dùng để làm việc với biểu thức chính quy được hỗ trợ sẵn trong PHP, các bạn có thể bấm vào tên của từng hàm để xem chi tiết cách sử dụng của chúng.

preg_match() - Tìm “kết quả đầu tiên” trùng khớp với mẫu cần tìm.
preg_match_all() - Tìm “tất cả kết quả” trùng khớp với mẫu cần tìm.
preg_replace() - Thay thế các kết quả trùng khớp với mẫu cần tìm bằng một chuỗi chỉ định.
preg_filter() - Trả về một chuỗi (hoặc một mảng) với các kết quả khớp với mẫu đã được thay thế, nhưng chỉ khi các kết quả khớp được tìm thấy.
preg_grep() - Trả về một mảng chỉ chứa các phần tử từ đầu vào khớp với mẫu đã cho.
preg_last_error() - Trả về mã lỗi cho biết lý do cuộc gọi biểu thức chính quy gần đây nhất không thành công.
preg_replace_callback() - Cho trước một biểu thức & lệnh gọi lại, trả về một chuỗi trong đó tất cả các kết quả khớp của biểu thức được thay thế bằng chuỗi con được trả về bởi hàm gọi lại.
preg_replace_callback_array() - Trả về một chuỗi hoặc một mảng các chuỗi trong đó các kết quả khớp của một tập các biểu thức chính quy được thay thế bằng giá trị trả về của một hàm gọi lại.
preg_split() - Ngắt chuỗi thành một mảng bằng cách sử dụng các kết quả khớp của biểu thức chính quy làm dấu phân cách.
preg_quote() - Thoát khỏi những ký tự có ý nghĩa đặt biệt trong biểu thức chính quy bằng cách đặt một dấu gạch chéo ngược phía trước chúng.

Các mẫu biểu thức chính quy

- Cặp dấu ngoặc [ ] được sử dụng để tìm một loạt các ký tự.

[abc] - Tìm một ký tự từ các ký tự tùy chọn bên trong cặp dấu ngoặc.
[^abc] - Tìm 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] - Tìm một ký tự trong phạm vi 0 - 9.

Các ký tự Meta

- Ký tự Meta là những ký tự có ý nghĩa đặc biệt.

| - Tìm kết quả khớp với bất kỳ một trong các mẫu được ngăn cách bởi |
. - Chỉ tìm một trường hợp của bất kỳ ký tự nào.
^ - Tìm kết quả khớp ở đầu chuỗi.
$ - Tìm kết quả khớp ở cuối chuỗi.
\d - Tìm một chữ số.
\s - Tìm một ký tự khoảng trắng.
\b - Tìm kết quả khớp ở đầu một từ hoặc cuối một từ.
\uxxxx - Tìm ký tự Unicode được chỉ định bởi số thập lục phân xxxx

Bộ định lượng

n+ - Khớp với bất kỳ chuỗi nào có chứa ít nhất một ký tự n.
n* - Khớp với bất kỳ chuỗi nào chứa 0 hoặc nhiều ký tự n.
n? - Khớp với bất kỳ chuỗi nào chứa 0 hoặc một ký tự n.
n{x} - Khớp với bất kỳ chuỗi nào có chứa x ký tự n.
n{x,y} - Khớp với bất kỳ chuỗi nào có chứa từ x đến y ký tự n.
n{x,} - Khớp với bất kỳ chuỗi nào có chứa từ x ký tự n trở lên.

- Lưu ý: Nếu mẫu bạn cần tìm có chứa một trong các ký tự đặc biệt, bạn có thể sử dụng dấu gạch chéo ngược \ để thoát khỏi ký tự đó. Ví dụ, để tìm một hoặc nhiều dấu chấm hỏi thì bạn sử dụng biểu thức như bên dưới:

$pattern = "/\?+/";