Tìm từ không theo sau bởi các từ khác
if [preg_match[$regex, $valid]] { echo "Found match: '" . $valid . "'\n"; } else { echo "No match: '" . $valid . "'\n"; } if [preg_match[$regex, $invalid]] { echo "Found match: '" . $invalid . "'\n"; } else { echo "No match: '" . $invalid . "'\n"; } ?>
Ví dụ liên quan trong cùng thể loại
Hàm PHP `strpos` trả về vị trí đầu tiên trong chuỗi `$haystack` mà tại đó chuỗi `$needle` xuất hiện. Đây là cách nó có thể được sử dụng
if[strpos[$str, "Hello"] !== false] echo "true";
Lưu ý việc sử dụng toán tử đẳng thức `. ==`. `strpos` trả về vị trí số xuất hiện của chuỗi `$needle` *nếu nó xảy ra*. và `false` nếu không. Vì các vị trí chuỗi bắt đầu từ 0 và 0 đánh giá là `false` trong PHP, nên sự bình đẳng nghiêm ngặt được đảm bảo bằng cách sử dụng `. toán tử ==`.
Để so sánh không phân biệt chữ hoa chữ thường, có thể sử dụng hàm liên quan `stripos`
Sử dụng biểu thức chính quy
PHP cung cấp các chức năng để cho phép khớp mẫu bằng cách sử dụng các biểu thức chính quy. Sử dụng hàm `preg_match`
if[preg_match["/Hello/", $str] echo "true";
`preg_match` thực hiện tìm kiếm biểu thức chính quy trong `$string` đã cho và trả về 1 nếu chuỗi khớp, 0 nếu không và `false` nếu xảy ra lỗi. Tuy nhiên, cần lưu ý rằng `preg_match` chậm hơn `strpos` và sẽ làm giảm hiệu suất đối với số lượng lớn các thao tác tìm kiếm
Giải pháp trên [cũng như giải pháp đầu tiên] bị cản trở bởi vấn đề khớp với chuỗi con chứ không phải *word*. Do đó, trận đấu trên sẽ thành công cho các chuỗi sau
- “Xin chàozzzz”
- “Xin chàoXin chàoLàm thế nàoDoYouDo”
Để xác định các từ rõ ràng thay vì chuỗi, mẫu cần được tinh chỉnh
$word = "Hello"; if[preg_match['/\b' . preg_quote[$word] . '\b/', $string]] echo "true";
Ký tự `\b` biểu thị ranh giới từ. Một ranh giới từ được xác định bởi sự hiện diện của một ký tự không phải là chữ và số hoặc dấu gạch dưới. Vì vậy, một số trường hợp vẫn có thể bị lỗi
- “Ờm_Xin chào”
- “Xin chào2u”
Sử dụng `strstr`
Một kiểm tra gián tiếp để xác nhận sự hiện diện của từ
if[strstr[$string, 'Hello'] !== false] echo 'true';
Đối với các tìm kiếm không phân biệt chữ hoa chữ thường, có thể sử dụng `stristr`. Phương pháp trên yếu hơn vì nó tìm kiếm chuỗi con, bỏ qua ranh giới từ
Sử dụng `substr_count`
Một chức năng tránh mọi vấn đề về boolean
if[substr_count[$string, 'Hello'] > 0] echo 'true';
Một lần nữa, không có bất kỳ liên quan nào đến ranh giới từ và về cơ bản, hàm sẽ kiểm tra các chuỗi con. Mặc dù gọn gàng hơn, nhưng nó chậm hơn `strpos`
Thao tác chuỗi sử dụng `explode`
Chuỗi được tìm kiếm được phân tách thành các ký tự ranh giới từ phổ biến và các mảng kết quả sau đó được tìm kiếm thành viên của *word*
$word = 'Hello'; $spaceWords = explode[' ', $string]; $nonBreakingSpaceWords = explode[chr[160], $string]; //   if[in_array[$word, $spaceWords] || in_array[$word, $nonBreakingSpaceWords]] echo 'true';
Sử dụng `mb_strpos`
Hàm `mb_strpos` tương tự như hàm `strpos` nhưng đảm bảo rằng tìm kiếm an toàn nhiều byte. Mã vẫn giống hệt nhau
Biểu thức chính quy PHP còn được gọi là biểu thức chính quy là thuật toán khớp mẫu mạnh mẽ có thể được thực hiện trong một biểu thức duy nhất. Biểu thức chính quy sử dụng các toán tử số học như [+,-,^] để tạo các biểu thức phức tạp. Họ có thể giúp bạn hoàn thành các tác vụ như xác thực địa chỉ email, địa chỉ IP, v.v.
Tại sao sử dụng biểu thức chính quy
- Biểu thức chính quy PHP đơn giản hóa việc xác định các mẫu trong dữ liệu chuỗi bằng cách gọi một hàm duy nhất. Điều này giúp chúng tôi tiết kiệm thời gian viết mã
- Khi xác thực đầu vào của người dùng như địa chỉ email, tên miền, số điện thoại, địa chỉ IP,
- Đánh dấu từ khóa trong kết quả tìm kiếm
- Khi tạo mẫu HTML tùy chỉnh. Regex trong PHP có thể được sử dụng để xác định các thẻ mẫu và thay thế chúng bằng dữ liệu thực tế
Trong hướng dẫn PHP Regex này, bạn sẽ học
Hàm biểu thức chính quy tích hợp trong PHP
PHP đã xây dựng sẵn các hàm cho phép chúng ta làm việc với các hàm thông thường mà chúng ta sẽ tìm hiểu trong hướng dẫn Biểu thức chính quy PHP này. Hãy xem xét các hàm biểu thức chính quy thường được sử dụng trong PHP
- preg_match[] trong PHP – hàm này được sử dụng để thực hiện khớp mẫu trong PHP trên một chuỗi. Nó trả về true nếu tìm thấy kết quả khớp và sai nếu không tìm thấy kết quả khớp
- preg_split[] trong PHP – hàm này được sử dụng để thực hiện khớp mẫu trên một chuỗi và sau đó chia kết quả thành một mảng số
- preg_replace[] trong PHP – hàm này được sử dụng để thực hiện khớp mẫu trên một chuỗi và sau đó thay thế khớp bằng văn bản đã chỉ định
Dưới đây là cú pháp cho một hàm biểu thức chính quy như PHP preg_match[], PHP preg_split[] hoặc PHP preg_replace[]
ĐÂY,
- “function_name[…]” là PHP preg_match[], PHP preg_split[] hoặc PHP preg_replace[]
- “/…/” Các dấu gạch chéo về phía trước biểu thị phần đầu và phần cuối của chức năng trình kiểm tra biểu thức chính quy PHP của chúng tôi
- “‘/pattern/'” là mẫu mà chúng ta cần khớp
- “chủ đề” là chuỗi văn bản được so khớp với
Bây giờ chúng ta hãy xem các ví dụ thực tế triển khai các hàm regex PHP ở trên
Preg_match[] trong PHP
Ví dụ đầu tiên sử dụng hàm preg_match[] trong PHP để thực hiện khớp mẫu đơn giản cho từ guru trong một URL nhất định
Đoạn mã dưới đây cho thấy việc triển khai chức năng kiểm tra preg_match[] cho ví dụ trên
________số 8Duyệt đến URL http. //localhost/php tuts/preg_match đơn giản. php
Hãy kiểm tra phần mã chịu trách nhiệm về đầu ra của chúng tôi “preg_match[‘/guru/’, $my_url]” TẠI ĐÂY,
- “preg_match[…]” là hàm biểu thức chính quy PHP
- “‘/guru/'” là mẫu biểu thức chính quy được so khớp
- “$my_url” là biến chứa văn bản được đối sánh
Sơ đồ dưới đây tóm tắt các điểm trên
PHP Preg_split[]
Bây giờ chúng ta hãy xem một ví dụ khác sử dụng hàm preg_split[] trong PHP
Chúng tôi sẽ lấy một cụm từ chuỗi và phân tách nó thành một mảng;
Chuỗi văn bản được sử dụng trong ví dụ này là “I Love Regular Expressions”
Đoạn mã dưới đây minh họa việc thực hiện ví dụ trên
Duyệt đến URL http. //localhost/phptuts/preg_split. php
PHP Preg_replace[]
Bây giờ chúng ta hãy xem hàm preg_replace[] trong PHP thực hiện so khớp mẫu và sau đó thay thế mẫu bằng một thứ khác
Đoạn mã dưới đây tìm kiếm từ guru trong một chuỗi
Nó thay thế từ guru bằng từ guru được bao quanh bởi mã css làm nổi bật màu nền
if[strpos[$str, "Hello"] !== false] echo "true";0
Giả sử bạn đã lưu tệp preg_replace. php, trình duyệt tới URL http. //localhost/phptuts/preg_replace. php
Siêu ký tự biểu thức chính quy
Các ví dụ trên đã sử dụng các mẫu rất cơ bản; . Bây giờ chúng ta hãy xem xét các siêu ký tự thường được sử dụng
Siêu ký tựMô tảVí dụ. Khớp với bất kỳ ký tự đơn nào ngoại trừ một dòng mới/. / khớp với bất kỳ thứ gì có một ký tự đơn^Khớp với phần đầu của hoặc chuỗi / loại trừ các ký tự/^PH/ khớp với bất kỳ chuỗi nào bắt đầu bằng PH$Match mẫu ở cuối chuỗi/com$/ khớp với guru99. com,yahoo. com vv. *Khớp với bất kỳ số không [0] hoặc nhiều ký tự/com*/ khớp với máy tính, giao tiếp, v.v. +Yêu cầu [các] ký tự phía trước xuất hiện ít nhất một lần/yah+oo/ khớp với yahoo\Được sử dụng để thoát ký tự meta/yahoo+\. com/ coi dấu chấm là một giá trị bằng chữ[…]Lớp ký tự/[abc]/ khớp với abca-zKhớp với các chữ cái viết thường/a-z/ khớp với thú vị, vui vẻ, v.v. A-Z Khớp các chữ cái in hoa/A-Z/ khớp với CÁI GÌ, NHƯ THẾ NÀO, TẠI SAO, v.v. 0-9 Khớp với bất kỳ số nào trong khoảng từ 0 đến 9/0-4/ khớp với 0,1,2,3,4Danh sách trên chỉ cung cấp các siêu ký tự được sử dụng phổ biến nhất trong các biểu thức chính quy
Bây giờ chúng ta hãy xem một ví dụ khá phức tạp để kiểm tra tính hợp lệ của một địa chỉ email
if[strpos[$str, "Hello"] !== false] echo "true";1
Giải thích mẫu “[/^[a-zA-Z0-9. _-]+@[a-zA-Z0-9-]+\. [a-zA-Z. ]{2,5}$/]”
ĐÂY,
- “‘/…/'” bắt đầu và kết thúc biểu thức chính quy
- “^[a-zA-Z0-9. _-]” khớp với bất kỳ chữ cái viết thường hoặc viết hoa nào, số từ 0 đến 9 và dấu chấm, dấu gạch dưới hoặc dấu gạch ngang
- “+@[a-zA-Z0-9-]” khớp với biểu tượng @ theo sau là chữ thường hoặc chữ in hoa, số từ 0 đến 9 hoặc dấu gạch ngang
- “+\. [a-zA-Z. ]{2,5}$/” thoát khỏi dấu chấm bằng cách sử dụng dấu gạch chéo ngược, sau đó khớp với bất kỳ chữ cái viết thường hoặc in hoa nào có độ dài ký tự từ 2 đến 5 ở cuối chuỗi
Duyệt đến URL http. //localhost/phptuts/preg_match. php
Như bạn có thể thấy từ phân tích ví dụ trên, siêu ký tự rất hiệu quả khi khớp với các mẫu