Biểu thức chính quy (Regular Expressions), hay còn gọi là regex, là một công cụ mạnh mẽ trong PHP để tìm kiếm và thao tác trên chuỗi. Với sự trợ giúp của biểu thức chính quy, bạn có thể kiểm tra chuỗi, tìm kiếm mẫu (pattern), thay thế hoặc tách chuỗi dựa trên các mẫu phức tạp một cách dễ dàng.
Trong bài viết này, chúng ta sẽ tìm hiểu về cú pháp cơ bản của biểu thức chính quy trong PHP, cách sử dụng nó để tìm kiếm, thay thế, và những hàm liên quan trong PHP.
1. Regular Expressions là gì?
Regular Expressions (biểu thức chính quy) là một chuỗi ký tự đặc biệt đại diện cho các mẫu mà bạn muốn tìm trong một chuỗi khác. Bạn có thể sử dụng regex để kiểm tra xem một chuỗi có phù hợp với một mẫu nào đó hay không, hoặc để thay thế, chia tách chuỗi dựa trên các mẫu đó.
Ví dụ:
/^abc/: Khớp với chuỗi bắt đầu bằng "abc"./[0-9]+/: Khớp với một hoặc nhiều ký tự số./[A-Za-z]*/: Khớp với bất kỳ chuỗi nào chỉ chứa các chữ cái từ A đến Z.
2. Cú pháp của biểu thức chính quy
Cú pháp của một biểu thức chính quy bao gồm nhiều thành phần, trong đó quan trọng nhất là các ký tự đặc biệt (metacharacters) và các ký tự đại diện (quantifiers). Dưới đây là một số ký tự và cú pháp cơ bản:
Ký tự đặc biệt (Metacharacters):
.: Đại diện cho bất kỳ ký tự nào ngoại trừ dấu xuống dòng.^: Khớp với đầu chuỗi.$: Khớp với cuối chuỗi.[]: Đại diện cho một tập hợp các ký tự. Ví dụ:[abc]khớp với 'a', 'b', hoặc 'c'.[^]: Đại diện cho tập hợp phủ định, nghĩa là bất kỳ ký tự nào không nằm trong tập hợp. Ví dụ:[^0-9]khớp với bất kỳ ký tự nào không phải số.\d: Khớp với một chữ số (0-9).\w: Khớp với một ký tự từ a-z, A-Z, 0-9, hoặc dấu gạch dưới (_).\s: Khớp với ký tự khoảng trắng (space, tab, newline).+: Khớp với một hoặc nhiều lần xuất hiện của mẫu trước đó.*: Khớp với 0 hoặc nhiều lần xuất hiện của mẫu trước đó.?: Khớp với 0 hoặc 1 lần xuất hiện của mẫu trước đó.
Ví dụ:
/[a-z]+/: Khớp với một hoặc nhiều ký tự thường từ a đến z./\d{3}/: Khớp với chính xác 3 chữ số.
3. Các hàm PHP hỗ trợ Regular Expressions
PHP cung cấp một số hàm mạnh mẽ để làm việc với biểu thức chính quy:
3.1. preg_match()
Hàm này kiểm tra xem chuỗi có khớp với mẫu regex không.
Cú pháp:
preg_match(pattern, subject, matches);pattern: Mẫu biểu thức chính quy.subject: Chuỗi cần kiểm tra.matches: (Tùy chọn) Nếu có khớp, các kết quả khớp sẽ được lưu trong mảng này.
Ví dụ:
$pattern = "/^abc/";
$string = "abc123";
if (preg_match($pattern, $string)) {
echo "Chuỗi bắt đầu bằng 'abc'.";
} else {
echo "Chuỗi không bắt đầu bằng 'abc'.";
}Kết quả:
Chuỗi bắt đầu bằng 'abc'.3.2. preg_match_all()
Hàm này tìm kiếm tất cả các phần trong chuỗi khớp với mẫu regex và trả về tất cả các kết quả khớp.
Cú pháp:
preg_match_all(pattern, subject, matches);Ví dụ:
$pattern = "/\d+/";
$string = "Có 3 con mèo và 7 con chó";
preg_match_all($pattern, $string, $matches);
print_r($matches);Kết quả:
Array
(
[0] => Array
(
[0] => 3
[1] => 7
)
)
3.3. preg_replace()
Hàm này thay thế các chuỗi khớp với mẫu regex bằng chuỗi khác.
Cú pháp:
preg_replace(pattern, replacement, subject);pattern: Mẫu regex.replacement: Chuỗi thay thế.subject: Chuỗi cần tìm kiếm và thay thế.
Ví dụ:
$pattern = "/\d+/";
$replacement = "nhiều";
$string = "Có 3 con mèo và 7 con chó";
$new_string = preg_replace($pattern, $replacement, $string);
echo $new_string;Kết quả:
Có nhiều con mèo và nhiều con chó3.4. preg_split()
Hàm này chia chuỗi thành các phần tử mảng dựa trên mẫu regex.
Cú pháp:
preg_split(pattern, subject);Ví dụ:
$pattern = "/[\s,]+/";
$string = "Táo, Cam, Chuối";
$array = preg_split($pattern, $string);
print_r($array);Kết quả:
Array
(
[0] => Táo
[1] => Cam
[2] => Chuối
)4. Ví dụ về Regular Expressions trong PHP
Dưới đây là một số ví dụ thực tế về việc sử dụng regex trong PHP:
4.1. Kiểm tra địa chỉ email hợp lệ
Sử dụng regex để kiểm tra xem địa chỉ email có hợp lệ hay không.
Ví dụ:
$email = "example@domain.com";
$pattern = "/^[\w.-]+@[a-zA-Z\d.-]+\.[a-zA-Z]{2,6}$/";
if (preg_match($pattern, $email)) {
echo "Địa chỉ email hợp lệ.";
} else {
echo "Địa chỉ email không hợp lệ.";
}Kết quả:
Địa chỉ email hợp lệ.4.2. Kiểm tra số điện thoại
Kiểm tra xem chuỗi có phải là số điện thoại hợp lệ (ví dụ: 10 chữ số).
Ví dụ:
$phone = "0123456789";
$pattern = "/^\d{10}$/";
if (preg_match($pattern, $phone)) {
echo "Số điện thoại hợp lệ.";
} else {
echo "Số điện thoại không hợp lệ.";
}Kết quả:
Số điện thoại hợp lệ.4.3. Tách chuỗi dựa trên khoảng trắng
Sử dụng regex để tách chuỗi thành mảng các từ.
Ví dụ:
$string = "PHP Regular Expressions là rất mạnh mẽ";
$pattern = "/\s+/";
$words = preg_split($pattern, $string);
print_r($words);Kết quả:
Array
(
[0] => PHP
[1] => Regular
[2] => Expressions
[3] => là
[4] => rất
[5] => mạnh
[6] => mẽ
)
5. Các lưu ý khi sử dụng Regular Expressions
- Biểu thức chính quy rất mạnh mẽ nhưng có thể gây khó hiểu nếu không quen thuộc với cú pháp của chúng. Hãy đảm bảo bạn kiểm tra kỹ càng các mẫu của mình để tránh lỗi.
- Khi sử dụng regex, hãy luôn nhớ rằng ký tự gạch chéo (
/) cần phải được thoát bằng dấu gạch chéo ngược (\) khi sử dụng trong chuỗi regex. - Đối với các tác vụ phức tạp, hãy cân nhắc việc sử dụng công cụ kiểm tra regex trực tuyến để kiểm tra và chỉnh sửa biểu thức trước khi đưa vào mã của bạn.
6. Kết luận
Biểu thức chính quy (Regular Expressions) là một công cụ cực kỳ mạnh mẽ trong PHP để thao tác trên chuỗi. Chúng giúp bạn dễ dàng tìm kiếm, kiểm tra, thay thế và tách chuỗi dựa trên các mẫu phức tạp. Bằng cách hiểu và sử dụng tốt các hàm như preg_match(), preg_replace() và preg_split(), bạn có thể xử lý chuỗi một cách hiệu quả và linh hoạt.
Hy vọng qua bài viết này, bạn đã nắm được những khái niệm cơ bản và cách sử dụng Regular Expressions trong PHP. Hãy thử nghiệm với các biểu thức chính quy để thấy được sức mạnh của chúng trong lập trình web!








