PHP - Bieu thức chính quy: Hướng dẫn cho người mới bắt đầu

Xin chào các pháp sư PHP tương lai! Hôm nay, chúng ta sẽ khám phá thế giới fascininating của các bieu thức chính quy (regular expressions) trong PHP. Đừng lo lắng nếu bạn chưa bao giờ viết mã trước đây - tôi sẽ là hướng dẫn viên thân thiện của bạn trong hành trình thú vị này. Hãy bắt đầu!

PHP - Regular Expression

Bieu thức chính quy là gì?

Trước khi chúng ta nhảy vào phần cụ thể của PHP, hãy hiểu bieu thức chính quy (regex) là gì. Hãy tưởng tượng bạn là một thám tử cố gắng tìm một mẫu cụ thể trong một biển văn bản. Đó chính là điều regex làm - nó giúp bạn tìm kiếm, khớp và manipulates văn bản dựa trên các mẫu. Đ Cooler, phải không?

Bieu thức chính quy POSIX

Bieu thức chính quy POSIX (Portable Operating System Interface) là tiêu chuẩn ban đầu cho regex trong PHP. Mặc dù chúng không được sử dụng phổ biến hiện nay, việc hiểu chúng có thể cho bạn một nền tảng vững chắc.

Ví dụ cơ bản về bieu thức chính quy POSIX

Hãy bắt đầu với một ví dụ đơn giản:

$text = "The quick brown fox jumps over the lazy dog.";
$pattern = "/quick/";
if (ereg($pattern, $text)) {
echo "Match found!";
} else {
echo "No match found.";
}

Trong ví dụ này, chúng ta đang tìm kiếm từ "quick" trong câu của chúng ta. Hàm ereg() kiểm tra xem mẫu có khớp với bất kỳ đâu trong văn bản hay không.

Hàm regex POSIX trong PHP

PHP cung cấp nhiều hàm regex POSIX. Dưới đây là bảng các hàm phổ biến nhất:

Hàm Mô tả
ereg() Khớp bieu thức chính quy
eregi() Khớp bieu thức chính quy không phân biệt chữ cái
ereg_replace() Thay thế bieu thức chính quy
split() Chia chuỗi thành mảng theo bieu thức chính quy

Ví dụ: Sử dụng eregi() để khớp không phân biệt chữ cái

$text = "The Quick Brown Fox";
$pattern = "quick";
if (eregi($pattern, $text)) {
echo "Match found!";
} else {
echo "No match found.";
}

Lần này, chúng ta sẽ tìm thấy một khớp ngay cả khi "Quick" được viết hoa trong văn bản của chúng ta.

Bieu thức chính quy theo phong cách PERL

Bây giờ, hãy nói về các bieu thức chính quy tương thích với PERL (PCRE), hiện đại và mạnh mẽ hơn. Đây là những gì bạn sẽ sử dụng nhiều nhất trong các dự án PHP của bạn.

Ví dụ cơ bản về PCRE

$text = "The quick brown fox jumps over the lazy dog.";
$pattern = "/quick/";
if (preg_match($pattern, $text)) {
echo "Match found!";
} else {
echo "No match found.";
}

Điều này trông tương tự như ví dụ POSIX của chúng ta, nhưng chúng ta sử dụng preg_match() thay vì ereg().

Hàm regex PCRE trong PHP

Hàm PCRE trong PHP linh hoạt và hiệu quả hơn. Dưới đây là bảng các hàm thường được sử dụng:

Hàm Mô tả
preg_match() Thực hiện khớp bieu thức chính quy
preg_match_all() Thực hiện khớp bieu thức chính quy toàn cục
preg_replace() Thực hiện tìm kiếm và thay thế bieu thức chính quy
preg_split() Chia chuỗi bằng bieu thức chính quy

Ví dụ: Sử dụng preg_match_all() để tìm tất cả các khớp

$text = "The quick brown fox jumps over the quick lazy dog.";
$pattern = "/quick/";
if (preg_match_all($pattern, $text, $matches)) {
echo "Found " . count($matches[0]) . " matches!";
print_r($matches);
} else {
echo "No matches found.";
}

Skript này sẽ tìm tất cả các lần xuất hiện của "quick" trong văn bản của chúng ta và lưu chúng vào mảng $matches.

Kỹ thuật PCRE nâng cao

Bây giờ chúng ta đã覆盖 các kiến thức cơ bản và một số kỹ thuật nâng cao, hãy xem xét một số kỹ thuật nâng cao hơn.

Metacharacters

Metacharacters là các ký tự đặc biệt trong regex có ý nghĩa cụ thể. Dưới đây là một số metacharacters phổ biến:

  • . : Khớp bất kỳ ký tự đơn nào ngoại trừ ký tự mới dòng
  • ^ : Khớp đầu của chuỗi
  • $ : Khớp cuối của chuỗi
  • * : Khớp không hoặc nhiều lần xuất hiện
  • + : Khớp một hoặc nhiều lần xuất hiện
  • ? : Khớp không hoặc một lần xuất hiện

Ví dụ: Sử dụng Metacharacters

$text = "The quick brown fox jumps over the lazy dog.";
$pattern = "/^The/";
if (preg_match($pattern, $text)) {
echo "The text starts with 'The'";
} else {
echo "The text does not start with 'The'";
}

Skript này kiểm tra xem văn bản của chúng ta có bắt đầu bằng "The" hay không.

Character Classes

Character classes cho phép bạn khớp bất kỳ ký tự nào trong một bộ ký tự. Chúng được bao quanh bởi các dấu ngoặc vuông [].

Ví dụ: Sử dụng Character Classes

$text = "The quick brown fox jumps over the lazy dog.";
$pattern = "/[aeiou]/i";
if (preg_match_all($pattern, $text, $matches)) {
echo "Found " . count($matches[0]) . " vowels!";
print_r($matches);
} else {
echo "No vowels found.";
}

Skript này tìm tất cả các nguyên âm trong văn bản của chúng ta. Dấu i ở cuối mẫu làm cho nó không phân biệt chữ cái.

Ứng dụng thực tế

Bây giờ chúng ta đã cover các kiến thức cơ bản và một số kỹ thuật nâng cao, hãy xem xét một ứng dụng thực tế.

Xác thực địa chỉ Email

$email = "[email protected]";
$pattern = "/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/";
if (preg_match($pattern, $email)) {
echo "Valid email address!";
} else {
echo "Invalid email address!";
}

Skript này sử dụng một mẫu regex phức tạp để xác thực địa chỉ email. Nó kiểm tra:

  • Một hoặc nhiều chữ cái, số, dấu chấm, dấu gạch dưới, dấu phẩy, dấu cộng hoặc dấu gạch ngang trước @
  • Một hoặc nhiều chữ cái, số, dấu chấm hoặc dấu gạch ngang sau @
  • Một dấu chấm tiếp theo là hai hoặc nhiều chữ cái ở cuối

Kết luận

Chúc mừng! Bạn vừa bước những bước đầu tiên vào thế giới của các bieu thức chính quy trong PHP. Nhớ rằng, regex là một công cụ mạnh mẽ, nhưng nó cũng có thể phức tạp. Ch关键是 thực hành - càng sử dụng nó nhiều, bạn sẽ càng thoải mái hơn.

Trong hành trình PHP của bạn, bạn sẽ thấy regex vô cùng hữu ích cho các nhiệm vụ như xác thực biểu mẫu, phân tích dữ liệu và manipulates văn bản. Tiếp tục khám phá, tiếp tục mã hóa và quan trọng nhất, hãy vui vẻ!

Credits: Image by storyset