Cách dùng với hàm preg_match

+ Bạn có một chuổi dữ liệu: $xxx, bạn cần kiểm tra xem chuổi đó có phải là định dạng: 4 con số đứng liền nhau, rồi đến dấu – , rồi đến 2 chữ số, rồi đến dấu -, rồi đến 2 chữ số nữa.

+ Bạn có một chuổi dữ  liệu: $xxx, bạn cần tìm trong chuổi $xxx, chổ nào có định dạng  là:  dấu <, rồi các kí tự, rồi đến dấu >. Sẽ thay thế bằng chữ yyy. Ví dụ: $xxx= “<a>noi dung gi do <p> noi dung tiep theo”; sẽ được biến đổi thành: “yyy noi dung gi do yyy noi dung tiep theo”.

Rõ ràng ở 2 tình huống trên thì các hàm string của chúng ta không xử lý được. Bởi vì các chuổi chúng ta cần so sánh hoặc cần tìm là không xác định, ta chỉ biết định dạng của nó thôi.

Do đó php hỗ trợ cho ta 2 nhóm hàm là  preg_.. để xử lý các tình huống trên. 

 

Một số lưu ý khi viết chuổi định dạng:

+ Dùng cặp dấu /../ để bắt đầu và kết thúc chuổi định dạng.

<?php
if (preg_match(“/php/”, “PHP is the web scripting language of choice.”)) {
    echo “A match was found.”;
} else {
    echo “A match was not found.”;
}
?>

==> Kiểm tra xem có tồn tại chuổi “php” không? Kết quả là không. Vì trong  chuổi mẹ chỉ có chử PHP (viết hoa) thôi.

+ Để chỉ định không phân biết chữ hoa hay chữ thường ta dùng kí hiệu i.

<?php
if (preg_match(“/php/i”, “PHP is the web scripting language of choice.”)) {
    echo “A match was found.”;
} else {
    echo “A match was not found.”;
}
?>

==> Kết quả là có tồn tại.

+ Dấu ^ để qui định chuổi định dạng nằm ở vị trí đầu tiên của chuổi mẹ.

<?php
if (preg_match(“/^php/i”, “Content PHP is the web scripting language of choice.”)) {
    echo “A match was found.”;
} else {
    echo “A match was not found.”;
}
?>

==> Kết quả là ko tìm thấy. Vì chử php không nằm ở vị trí đầu tiên

+ Dầu $ qui định chuổi định dạng nằm ở  vị trí cuối cùng của chuổi mẹ.

<?php
if (preg_match(“/php$/i”, “PHP is the web scripting language of choice. And I choice PHP”)) {
    echo “A match was found.”;
} else {
    echo “A match was not found.”;
}
?>

==> Kết quả là tim thấy. vì  có chữ PHP  ở cuối chuổi mẹ.

+ Dấu \s để qui định khỏang  trắng

<?php
if (preg_match(“/php(\s)pro/i”, “PHP pro is the web scripting language of choice”)) {
    echo “A match was found.”;
} else {
    echo “A match was not found.”;
}
?>

==> Tìm chuổi php pro (có khỏang trắng ở giữa chữ php và chữ pro). Kết quả là có tồn tại

+ Dấu ? để qui định: không tồn tại, hoặc nếu tồn tại thì chỉ có 1  thôi

<?php
if (preg_match(“/php(\s)?pro/i”, “PHPpro is the web scripting language of choice. And I choice PHP”)) {
    echo “A match was found.”;
} else {
    echo “A match was not found.”;
}
?>

==> Tìm chuổi phppro hoặc php pro. Kết quả là tồn tại.

+ Dấu * để qui định: không tồn tại, hoặc nếu có thì có thể có nhiều

<?php
if (preg_match(“/php(\s)*pro/i”, “PHP            pro is the web scripting language of choice. And I choice PHP”)) {
    echo “A match was found.”;
} else {
    echo “A match was not found.”;
}
?>

==> Tìm chuổi phppro hoặc php pro (ở giữa có thể có nhiều khoảng trắng). Kết quả là tồn tại.

+ Dấu + để qui định: phải tồn tại từ 1 trở lên.

<?php
if (preg_match(“/php(\s)+pro/i”, “PHPpro is the web scripting language of choice. And I choice PHP”)) {
    echo “A match was found.”;
} else {
    echo “A match was not found.”;
}
?>

==> Tìm chuổi php pro (ở giữa phải có từ 1 khoảng trắng trở lên). Kết quả là không tồn tại.

+ Cặp dấu [] để liệt kê

<?php
if (preg_match(“/[_,]php/i”, “_PHP is the web scripting language of choice”)) {
    echo “A match was found.”;
} else {
    echo “A match was not found.”;
}
?>

==> Tìm chuổi “_php” hoặc “,php” . Kết quả là tồn tại

+ A-Z, a-z , A-z  qui định một kí tự viết hoa, viết thường, tất cả. Phải đi kèm với  dấu []

<?php
if (preg_match(“/[a-z]php/i”, “aPHP is the web scripting language of choice”)) {
    echo “A match was found.”;
} else {
    echo “A match was not found.”;
}
?>

==> Kết quả là tồn tại

+ 0-9 qui định một kí số

<?php
if (preg_match(“/[0-9]php/i”, “_PHP is the web scripting language of choice”)) {
    echo “A match was found.”;
} else {
    echo “A match was not found.”;
}
?>

==> Kết quả ko tồn tại

+ [A-z0-9]: một kí tự họăc một kí số

<?php
if (preg_match(“/[A-z0-9]php/i”, “aPHP is the web scripting language of choice”)) {
    echo “A match was found.”;
} else {
    echo “A match was not found.”;
}
?>

==> Kết quả là tồn tại

+ {} qui định số lượng

<?php
if (preg_match(“/[a-z]{2,5}php/i”, “aPHP is the web scripting language of choice”)) {
    echo “A match was found.”;
} else {
    echo “A match was not found.”;
}
?>

==> Tìm chuổi mà có từ 2 đến 5 kí tự rồi đến chữ php. Kết quả ko tồn tại. Vì aPHP phía trước chữ PHP chỉ có một kí tự

tìm hiểu từ http://www.laptrinhwebphp.com/tag/preg_match

Dạng chuẩn của nó như sau:
preg_match('/regularexpression/', $textstring)
Chú ý là có dấu / bắt đầu và kết thúc chuổi cho chuổi cần tìm. Ngoài ra còn có hàm preg_split,
preg_replace và preg_match_all. Bạn có thể tìm trong php.net

Tìm một cụm từ chính xác
ví dụ
if (preg_match('/tutorial/', 'tips and tutorials are here'))
echo "word 'tutorial' found!";
Chú ý nó phân biệt chữ hoa và chứ thường . Với ví dụ trên thì sẽ cho kết quả là tìm thấy
Bắt đầu và kết thúc chuổi
Nếu muốn tìm từ vị trí bắt đầu thì dùng ^ , còn tìm đến vị trí kết thúc thì dùng $

"^The": tương ứng sẽ tìm xem từ "The" có nằm đầu chuổi hay không;
"of despair$": kiểm tra xem cuối chuổi có phải là "of despair";

sử dụng ký tự
"*" : từ không đến nhiều kí tự
"+" : từ 1 đến nhiều ký tự
"?" : 0 hoặc 1 ký tự
Ví dụ:
"tu*": Tìm chuổi mà có bắt đầu là tu ( "tu", "tuuuuu", "tutorial", etc).
"tu+": có ít nhất một ký tự sau u ( "tuuu", "tut", etc).
"tu?": có hoặc không có 1 ký tự sau u.
"t?b+$": a possible t followed by one or more u's ending the string.
Or if you want to be more specific on the number of multiple characters, you can specify a range within braces {}.
"o{3}h": matches a string that has exactly three o's followed by h ("oooh").
"o{3,}h": there are at least three o's ("oooh", "ooooh", "ooooooooooh", etc).
"o{3,5}h": from three to five o's ("oooh", "ooooh", or "oooooh").
You always specify the first number of a range but you can't specify just the last number (eg - {3,5} or {3,} but not {,5}).
If you want to quantify a sequence of characters rather than just a single character, put them inside parentheses:
"t(ut)*": matches a string that has an t followed by zero or more copies of the sequence "ut" (eg - "t", "tut", "tutututut", etc).
"t(ut){1,3}": between one to three copies of "ut" ("tut", "tutut", "tututut").
OR operator
The '|' symbol works as an OR operator: "tips|tutorials": matches a string that has either "tips" or "tutorials" in it.
"(b|cd)ef": a string that has either "bef" or "cdef".
"(a|b)*c": a string that has a sequence of alternating a's and b's ending in a c.
Wild character
A period ('.') is a wild character - it can stand for any single character:
"t.*p": matches a string that has a t followed by any number of characters followed by a p ("tip", "tp", "tdfsadfsadsfp", etc).
"^.{5}$": a string with exactly 5 characters ("bingo", "blind", "rainy", "asdfe", etc).
Bracket expressions
Bracket expressions lets you match a whole range of characters to a single position of a string:
"[tu]": matches a string that has either a 't' or a 'u' (that's the same as "t|u");
"[a-d]": a string that has lowercase letters 'a' through 'd' (that's equal to "a|b|c|d" and even "[abcd]");
"^[a-zA-Z]": a string that starts with a letter;
"[0-9]%": a string that has a single digit before a percent sign;
",[a-zA-Z0-9]$": a string that ends in a comma followed by an alphanumeric character.
Note that inside brackets, all the regex special characters are just ordinary characters - they don't do any of their usual regular expression functions.
Excluding characters
You can also exclude characters by using a '^' as the first symbol in a bracket expression:
"%[^a-zA-Z]%" matches a string with a character that is not a letter between two percent signs).
Note - the difference between this application and using ^ at the start of a regular expression which specifies the first character of a string.
Escaping regular expression characters
What do you do if you want to check for one of the regular expression special characters "^.[$()|*+?{\" in your text string? You have to escape these characters with a backslash ('\').
Retrieving text using preg_match
If you want to extract a phrase out of a text string, you use the PHP function preg_match in the following format:
preg_match('/regular expression/', $textstring, $matchesarray)
It returns a value of 1 if there is a match to your regular expression, a value of 0 if no match. For example,
echo preg_match ('/test/', "a test of preg_match");
outputs 1 whereas
echo preg_match ('/tutorial/', "a test of preg_match");
outputs 0.
Preg_match is really useful for extracting phrases out of a text string. To do this, you specify an array as the third argument (eg - $matchesarray is what I use in the example). You also need to use parenthesizes in your regular expression to specify the sections you want to retrieve. If there's a successful match, $matchesarray is filled with the results of the search. $matchesarray[0] contain the entire text string. $matchesarray[1] contains the text that matched the first captured parenthesized subpattern, and so on.
For example, the following regex divides a url into two sections. The first section is "http://" (note the escaping back slash), the second section is whatever comes after:
preg_match ('/(http://)(.*)/', "http://www.tipsntutorials.com/", $matchesarray)
This fills $matchesarray with the following values:
$matchesarray[0] = "http://www.tipsntutorials.com/"
$matchesarray[1] = "http://"
$matchesarray[2] = "www.tipsntutorials.com/"