Các kí tự đặc biệt trong Regular Expressions (phần 1)

Các mẫu có thể chứa các kí tự đặc biệt cho các mục đích tìm kiếm nâng cao mà tìm kiếm trực tiếp sẽ khó khăn như tìm một đoạn chứa một hoặc nhiều hơn một kí tự b, hay tìm một hoặc nhiều kí tự dấu cách (while space). Bảng dưới đây mô tả các kí tự đặc biệt có thể dùng với biểu thức chính quy.

Kí tự Ý nghĩa
\ Một dấu gạch chéo sẽ biến một kí tự thường liền kế phía sau thành một kí tự đặc biệt .
Ví dụ: /a/ sẽ được khớp với các kí tự 'a' in thường nhưng khi đổi thành /\a/ thì kí tự a trở thành kí tự đặc biệt và không match với kí tự nào nữa.
Ngược lại, với các kí tự đăc biệt sẵn khi thêm \ thì sẽ trở thành kí tự thông thường.
Ví dụ, mẫu /a*/ có '' là kí tự đặc biệt và mẫu này sẽ bị phụ thuộc vào kí tự này, nên được hiểu là sẽ tìm khớp với 0 hoặc nhiều kí tự a. Nhưng, với mẫu /a*/ thì kí tự '' lúc này được hiểu là kí tự thường nên mẫu này sẽ tìm kiếm xâu con là 'a* '.
\ cũng là một kí tự đặc biệt, khi cần so khớp chính nó ta cũng phải đánh dấu nó là kí tự đặc biệt bằng cách đặt \ ở trước (\).
^ Khớp các kí tự đứng đầu một chuỗi. Nếu có nhiều cờ này thì nó còn khớp được cả các kí tự đứng đầu của mỗi dòng (sau kí tự xuống dòng).
Ví dụ: /^a/ sẽ không khớp được với 'a' trong "bcd a" vì 'a' lúc này không đứng đầu chuỗi, nhưng nó sẽ khớp "abc d" vì lúc này 'a' đã đứng đầu chuỗi.
$ So khớp ở cuối chuỗi. Nếu có flag m (multiline) thì nó sẽ so khớp với kí tự nằm ngay trước kí tự xuống dòng.
* Cho phép kí tự trước nó lặp lại 0 lần hoặc nhiều lần.
Ví dụ: /bo*/ khớp với 'boooo' trong chuỗi "A ghost booooed" nhưng khớp với các kí tự 'b' trong chuỗi "A birth warbled"
+ Cho phép kí tự trước nó lặp lại 1 lần hoặc nhiều lần.
? Cho phép kí tự trước nó lặp lại 0 lần hoặc 1 lần duy nhất.
Nếu sử dụng kí tự này ngay sau bất kì kí tự định lượng nào trong số ,+,? hay {} thì nó sẽ dừng so khớp sau ngay khi tìm được kí tự phù hợp
. khớp với bất kì kí tự đơn nào ngoại trừ kí tự xuống dòng.
(x) Khớp 'x' và nhớ kết quả so khớp này. Các dấu ngoặc tròn được gọi là các dấu ngoặc có nhớ.
Ví dụ: /(foo) (bar) \1 \2/ khớp với 'foo' và 'bar' trong chuỗi "foo bar foo bar". \1 và \2 trong mẫu khớp với 2 từ cuối.
(?:x) Khớp 'x' nhưng không nhớ kết quả so khớp.
x(?=y) Chỉ khớp 'x' nếu 'x' theo sau bởi 'y'.
Ví dụ, /Jack(?=Sprat)/ chỉ khớp với 'Jack' nếu đằng sau nó là 'Sprat'.
x(?!y) Chỉ khớp 'x' nếu 'x' không được theo sau bởi 'y'.
Ví dụ: /\d+(?!.)/ chỉ khớp với số không có dấu . đằng sau.
{n} Kí tự đứng trước phải xuất hiện n lần. n phải là một số nguyên dương.
Ví dụ, /a{2}/ không khớp với 'a' trong "candy", nhưng nó khớp với tất cả kí tự 'a' trong "caandy", và khớp với 2 kí tự 'a' đầu tiên trong "caaandy".

Còn tiếp...