Regex và cuộc đời bất hạnh của nó

 Hế hế, lâu rồi không ghi blog đơn giản vì chán quá + lười nữa. 
Nhận thấy mình có vấn đề với thk cha Regex nên tiện hôm nay note lại để hiểu rõ hơn.

-----------------------------------------------------------------------------------------------------------

Khái niệm: Regex là các mẫu(pattern) thay vì các chuỗi dùng để tìm kiếm/ thay thế/.... Nói nôm na là nó đc dùng xử lý chuỗi một cách thuận tiện hơn. Đây là cái sẽ làm nền tảng cho blind regex injection attack 

Cú pháp Regex:

Dùng để thể hiện vị trí ^ và $.

^The: match với chữ The nhưng nó phải đứng đầu tiên

end$: match với từ end nhưng nó phải đứng cuối

^The end$: match với từ The end

end: match với bất kì từ end nào có trong câu

Dùng để thể hiện số lượng * + ? {}. Lấy ví dụ với từ abc

abc*: match với từ ab và không có hoặc có nhiều chữ c đằng sau: 

-VD: abccc,ab,abc,...

abc+: match với ab và có một hoặc nhiều kí tự c đằng sau

-VD: abc,abccc,...

abc?: match với ab và có hoặc không có 1 chữ c đằng sau.

-VD: ab,abc

abc{2}: match với ab và có 2 kí tự c đằng sau.

-VD: abcc

abc{2,3}: match với ab và có từ 2-3 kí tự c đằng sau

-VD: abcc,abccc

abc{2,}: match với ab và có từ 2 kí tự c trở lên

 -VD: abcc.abccc,...

a(bc)*: match với kí tự a và không có hoặc có nhiều cụm bc phía sau

-VD: abcbc,a,abc,..

a(bc){2,3}: match với từ a và có từ 2-3 cụm bc phía sau.

-VD: abcbc,abcbcbc 

Toán tử | và [] 

a(b|c): match kí tự a với kí tự b hoặc c.

-VD: ab,ac.

a[bc]: kết quả như trên

-VD: ab,ac

Kí tự phân loại \d \w \s . 

\d: khớp với bất kì 1 kí tự số nào từ 0-9.Lưu ý, do - không phải là kí tự sô nên sẽ không match @@

-VD: 1,2,3,...

\w: khớp với bất kì 1 kí tự chữ hoặc _ hoặc số

-VD: w,1,_

\s: khớp với bất kì kí tự khoảng trắng nào bao(gồm cả tab và backspace).

.: khớp với bất kì 1 kí tự nào

-VD: a,2,@,_

Còn \D \W \S là phủ định của mấy thk trên. 

Flags:

g(global): cờ này có tác dụng giúp tìm kiếm các đoạn kí tự trên toàn bộ chuỗi, nếu không có có flag này thì việc tìm kiếm sẽ dùng lại ngay lần match đầu tiên

m(multi line): cờ này có tác dụng tìm kiếm trên nhiều dòng. Ví dụ /$The end$/ mỗi dòng sẽ là 1 chuỗi riêng, nếu không có flag này thì chỉ tìm kiếm trên cả chuỗi.

i(insensitive): không phân biệt chữ hoa chữ thường.

Kí hiệu phân nhóm () 

a(bc): giá trị trong () sẽ là 1 group, giá trị trong group sẽ được capture lại.

a(?:bc)*: giá trị trong group sẽ không được capture lại.

a(?<foo>bc) đặt trên trong group, group thường sẽ được chỉ định là group[0], group[1]. Trong trường hợp này group là group[foo]

Refferer:

+) Viblo


Nhận xét

Bài đăng phổ biến từ blog này

KMACTF và nỗi buồn éo làm được gì cả T__T