Regular Expressions In PHP

StarWar

Internship/Fresher
Dec 8, 2013
28
0
0
1. Giới thiệu

Regular Expression là gì?
+ Biểu thức chính quy.
+ Hiểu nôm na là 1 chuỗi có quy tắc để mô tả những chuỗi(string) khác.

Làm việc với string thường rất vất vả và đòi hỏi độ chính xác cao. Với Regular Expression trong PHP, công việc này được đơn giản đi rất nhiều. 1 dòng code trong PHP làm việc với string trong trường hợp này có thể sánh với hàng trang code trong các ngôn ngữ khác.

Ta có thể ứng dụng những đoạn code đơn giản ở trên vào các form đòi hỏi nhập dữ liệu, thông tin người dùng, ... hay dùng để lọc các biến được truyền.

2. Hàm preg_match trong PHP

Trong PHP có một hàm là preg_mathch(string pattern, string subject). Hàm này trả về 1 nếu đúng quy tắc so mẫu, trả về 0 nếu sai quy tắc so mẫu.

Với:
string pattern: là biểu thức dùng để so mẫu. Các chuỗi được so mẫu phải tuân thủ quy tắc của biểu thức này.
string subject: là chuỗi được so mẫu.

Một pattern (biểu thức so mẫu) có dạng:

$pattern = "/ thiết_lập quy_tắc_ở đây /";

Biểu thức so mẫu nằm giữa hai dấu "/", và hai dấu "/" này nằm trong cặp nháy đôi.

Để viết regular expression ta cần làm quen với những ký tự có ý nghĩa đặc biệt trong một regular expression đó là các Meta symbols
Meta Symbols
Ý nghĩa
^
Bắt đầu dòng (string)
$
Kết thúc dòng (string)
.
Đại diện cho một ký tự bất kỳ
+
Lặp lại ký tự hay cụm ký tự đứng trước nó (>=1)
Ví dụ: a+ : nghĩa là lặp lại chữ a và phải có ít nhất là một chữ a. Do vậy mới ghi >=1 cho dễ hiểu.
- 123a: 1(đúng)
- 123aa: 1(đúng)
- 123 : 0(sai). vì không có chữ a nào được lặp.
*
Cũng là lặp lại ký tự hay cụm ký tự đứng trước nó (>=0)
Ví dụ: a* : nghĩa là lặp lại chữ a, nếu không có chữ a cũng không sao. Do vậy mà >=0
-123a: (1)
-123aaa: (1)
-123: (1). Không có chữ a cũng không sao.
?
Tồn tại hay không tồn tại ký tự hay cụm ký tự đứng trước nó
\
Dấu \ đi kèm với 1 meta symbol sẽ làm mất ý nghĩa của meta symbol đó - trả về symbol bình thường.

Ví dụ:

$patern = "/.../"; (trong dấu...ta thay các biểu thức sau)

  • ^a : Bắt đầu của dòng là ký tự a. Dòng này có thể là abcd, aaaa, a4684,.... miến sao bắt đầu bằng ký tự a.
  • ^string$ : Dòng này mang giá trị cứng là string vì nó bị chặn giữa ^ và $. Nghĩa là chỉ có chữstring mới đúng, còn lại thì sai hết.

Từ bây giờ thì ta sẽ sử dụng: $pattern = "/^...$/"; ^ :bắt đầu một dòng, $ :kết thúc một dòng

  • a. :có thể mang giá trị: ab, a1, au, af .Nhưng không thể là abc, ab1, vì dấu . chi đại diện cho một ký tự!
  • ax+ :biểu diễn cho dòng: ax, axx, axxxx - nhưng không thể là "a" vì + đại diện cho >=1 ký tự.
  • ay* :biểu diễn cho dòng: a, ay, ayy, ayyyyyyyyy,....
  • ab? :biểu diễn cho: a, ab (b có thể có hoặc không)
  • a\+b :biểu diễn cho dòng: "a+b"

Cách biểu diễn số và chữ cái

\d : Biểu diễn một con số bất kỳ.


Ví dụ:

Code:
[COLOR=#ff0000]$reg5="/^\d$/";[/COLOR] [COLOR=#006400]// chi co 1 chu so[/COLOR]
[COLOR=#ff0000]$reg5a="/^\d\d$/";[/COLOR][COLOR=#006400] // chi co 2 chu so[/COLOR]
[COLOR=#ff0000]$reg5b = "/^10A\d\d\d\d\d\d$/"; [/COLOR][COLOR=#006400]// 10A123456[/COLOR]

\D : Ký tự bất kỳ không phải là chữ số (ngược với \d)

Ví dụ:

Code:
[COLOR=#ff0000]$reg = "/^\D$/";[/COLOR][COLOR=#008000] // bieu dien mot ky tu bat kỳ khong phai la so$reg ="/^\d\D\d\D$/"; bieu dien mọt chuoi co dang 1a2b. Với a,b là ký tự bất kỳ khong phai la [/COLOR]so
\w - Ký tự từ a-z, A-Z, hoặc 0-9
Ví dụ:

Code:
[COLOR=#ff0000]$reg6 = "/^\w\w\w$/"; [/COLOR][COLOR=#006400]// chi gom 3 ky tu từ a->z, A->Z, 0->9. Khong co ky tu dac biet$reg7 ="/^\w+\@\w+\.\w+$/";[/COLOR] // kiem tra email teo@yahoo.com

\W - Ngược lại với \w (nghĩa là các ký tự không thuộc các khoảng: a-z, A-Z, hoặc 0-9)


Nghĩa là chỉ chứa các ký tự đặc biệt

Ví dụ:

Code:
[COLOR=#ff0000]$reg = "/^\W$/";[/COLOR][COLOR=#0000ff] // chua mọt ký tu khong thuoc tù a-z , A-Z, 0-9[/COLOR]
\s+ - Có nghĩa: có >=1 khoảng trắng.

Ví dụ:

Code:
[COLOR=#ff0000]$reg ="/^\w+\s\d+$/"; [/COLOR][COLOR=#008000]// bieu dien a 1, g 22, abc 123[/COLOR]


Ý nghĩa các dấu ngoặc tròn, ngoặc nhọn, ngoặc vuông

Ngoặc tròn: () : dùng để gom các ký tự thành một nhóm

Ví dụ:

Code:
[COLOR=#ff0000]$reg = "/^\d(ab)+$/";[/COLOR][COLOR=#0000ff]// bieu dien 1ab, 1abab, 1ababab. Lặp lại ab vô hạn[/COLOR]
Ngoặc nhọn {}: dùng để lặp ký tự hay cụm ký tự đứng trước nó với số lượng xác định
+ {3}: lặp lại chỉ 3 lần.
+ {3,}: lặp lại >=3.
+ {3,10}: lặp lại từ 3 đến 10 lần.​

Ví dụ:

Code:
[COLOR=#ff0000]$reg8 = "/^\d{3}$/";[/COLOR][COLOR=#008000]// lap chi 3 so
[/COLOR][COLOR=#ff0000]$reg8a = "/^\d{3,}$/";[/COLOR][COLOR=#008000]// lap >=[/COLOR][COLOR=#006400]3
[/COLOR][COLOR=#ff0000]$reg9 = "/^a(xy){2,}$/";[/COLOR][COLOR=#006400] [/COLOR][COLOR=#008000]// lap xy toi thieu tu 2 lan tro len
[/COLOR][COLOR=#ff0000]$reg9a =[COLOR=#008000][/COLOR] "/^a(xy|12){2,}$/"; [/COLOR][COLOR=#008000]// lap xy hoac 12 toi thieu 2 lan tro len
[/COLOR]​
Dấu gạch thẳng đứng để lựa chọn hoặc cái này hoặc cái kia

Ví dụ:

Code:
[COLOR=#ff0000]$reg16 = "/^[a-zA-Z0-9]+\.(jpg|png|gif|jpeg|JPG|PNG|GIF|JPEG)$/";[/COLOR][COLOR=#0000ff] // kiem tra file hinh co duoi khac nhau[/COLOR]

Dấu ngoặc vuông để chỉ đoạn ký tự cho phép
+ [a-z] : chỉ các chữ từ a đến z
+ [A-Z] : chỉ các chữ từ A đếnZ
+ [0-9] : chỉ các số từ 0-9
+ [a-zA-z0-9] : các chữ từ a-z, A-Z, 0-9

Ví dụ:

Code:
[COLOR=#ff0000]$reg13 = "/^[3-7]$/";[/COLOR] [COLOR=#0000ff]// chi co 1 so trong khoang tu 3 den 7[/COLOR]
3. Hàm preg_replace trong PHP

Hàm này dùng để tìm một string theo quy tắc và thay thế string đó theo mình muốn.

Cú pháp:

preg_replace(mixed regex, mixed replace, mixed subject);

mixed regex: biểu thức so mẫu
mixed replace: mẫu thay thế.
mixed: chuỗi mẹ

Ví dụ:

Code:
 preg_replace("/(\d{3})/","<u>$1</u>","abc 123 efg");
Tìm chuỗi 123 và gạch dưới nó. Kết quả abc 123 efg

Chú ý:

- Cứ 1 nhóm trong dấu ngoặc tròn được đại diện bằng các biến $ là được đánh dấu lần lượt từ trái sang phải, bắt đầu là $1, tiếp theo là $2 , $3...

- Nếu thay thế nó bằng một cái khác thì không có $1, $2, $3...Còn nếu chỉ thay đổi nó thì dùng $1, $2, $3.. như ví dụ ở trên.

Ví dụ

Code:
[COLOR=#ff0000]preg_replace[/COLOR][COLOR=#0000ff]("/^\<div(\s+)(id\=\'teo\')?\>(\s+)?(.*)(\s+)?\<\/div\>$/","<b><u>$4</u></b>","<div id='teo'> Nguyen Van Teo </div>");[/COLOR]

Tìm
<div id='teo'> Nguyen Van Teo</div> và thay đổi nó thành <b><u>Nguyen Van Teo</u></b>

Lưu ý:

Biểu thức so mẫu viết liền, không khoảng trắng. Nếu chuỗi mẹ có khoảng trắng thì mình thêm vào biểu thức so mẫu là (\s+). Khi đó nhớ đếm cụm dấu ngoặc để xác định biến $ cho chính xác.

4. Hàm preg_split trong PHP

Hàm này có tác dụng cắt chuỗi giống như hàm explore, nhưng hàm explore phải kiếm đúng theo ký tự, còn hàm này kiếm theo quy tắc

Cú pháp:

preg_split(string pattern, string subject);

string pattern: biểu thức so mẫu
string subject: chuỗi mẹ

Chú ý: hàm này trả về một mảng

Ví dụ:

Code:
[COLOR=#008000]$macth = preg_split("/\#/","abc#123#efg");print_r($macth);
[/COLOR]

Nguồn:http://cunghocweb123.blogspot.com/2013/07/regular-expressions-trong-php-php.html
 
Last edited:

About us

  • Securityzone.vn là một trang web chuyên về an ninh mạng và công nghệ thông tin. Trang web này cung cấp các bài viết, tin tức, video, diễn đàn và các dịch vụ liên quan đến lĩnh vực này. Securityzone.vn là một trong những cộng đồng IT lớn và uy tín tại Việt Nam, thu hút nhiều người quan tâm và tham gia. Securityzone.vn cũng là nơi để các chuyên gia, nhà nghiên cứu, sinh viên và người yêu thích an ninh mạng có thể trao đổi, học hỏi và chia sẻ kiến thức, kinh nghiệm và giải pháp về các vấn đề bảo mật trong thời đại số.

Quick Navigation

User Menu