Trong phần này chúng ta sẽ tìm hiểu các cách đơn giản để so khớp với các mẫu dùng:

  • Các chuỗi tầm thường (string literals)
  • Các kí số (digits)
  • Các kí tự (letters)
  • Các kí tự đại diện (characters of any kind)

Công cụ RegExr

Ở phần trước chúng ta đã dùng công cụ Regex Pal, trong phần này chúng ta sẽ dùng một công cụ trực tuyến khác là RegExr bằng cách truy cập trang http://regexr.com/. Giao diện cùng với văn bản mẫu trông như sau:

Các chuỗi tầm thường (string literals)

Regular expression đơn giản nhất là chuỗi so khớp chứa một hay nhiều kí tự tầm thường (string literals hay gọi tắt là literals). Dùng string literals khi cần tìm một từ nào đó từ văn bản, ví dụ tìm từ When bằng cách gõ When ở ô Expression bên trên và chữ When (nếu tìm thấy) trong văn bản mẫu ở ô bên dưới sẽ được tô màu xanh như sau:

Mặc định, các chuỗi so khớp là case-sensitive nên When sẽ khác when. Nếu chúng ta gõ từ when trong ô Expression thì sẽ không tìm thấy từ nào bên dưới:

Muốn tìm tất cả từ When và không phân biệt hoa thường, chúng ta có thể sử dụng các tuỳ chọn trong flags ở góc phải trên của RegExr, trong trường hợp trên chọn ignore case (i) (global (g) là tuỳ chọn mặc định) như sau:

Các kí số (digits)

Để so khớp với các kí số (từ 0 đến 9), chúng ta có thể dùng \d hay [0-9] ([0-9] là lớp kí tự tương đương với [0123456789]). Nếu chúng ta muốn so khớp với một vài kí số cụ thể, chúng ta có thể dùng lớp kí tự. Ví dụ dùng [0345] để so khớp với các kí số 0, 3, 4, 5.

\d vào ô Expression, chọn tuỳ chọn global (g) trong flags, kết quả:

Gõ [0-9] cũng cho kết quả tương tự.

Gõ [01] kết quả:

Nếu những người bắt đầu làm quen với regular expression chưa hiểu được kết quả thì RegExr cung cấp các chức năng để hỗ trợ, ví dụ chức năng Explain dùng để giải thích kết quả:

Khung chức năng bên trái màn hình RegExr cung cấp các tham khảo (Reference) hay ví dụ (Examples) về regular expression:

Các kí tự (không phải kí số)

Để so khớp với các kí tự không phải kí số, chúng ta có thể dùng các mẫu phủ định của \d hay [0-9], cụ thể là dùng [^\d] hay [^0-9] trong ô Expression:

Hay

Một giải pháp thay thế cho [^\d] hay [^0-9]\D (kí tự D hoa):

* Lưu ý rằng tất cả các trường hợp minh hoạ trên đều chọn global (g) trong flags.

Nếu chúng ta muốn chỉ so khớp các kí tự và các kí số mà không xét đến các kí tự đặc biệt như khoảng trắng, dấu nối, dấu ngoặc, v.v. thì có thể dùng \w thay cho \D. Xem và so sánh kết quả khi thay thế \D bằng \w:

Nếu chúng ta muốn so khớp với các kí tự đặc biệt như khoảng trắng, dấu nối, dấu ngoặc, v.v. có thể dùng [^\w] hay \W (W hoa):

Hay

Một danh sách các kí tự tắt và chức năng được mô tả như bảng sau:



 

 

 

So khớp khoảng trắng (whitespace)

Dùng kí tự tắt (character shorthand) \s để so khớp các kí tự khoảng trắng (bao gồm space, tab, carriage return, new line, vertical tab, form feed). Kết quả khi gõ \s:

Chúng ta có thể dùng \S (S hoa) để chọn tất cả các kí tự trừ các kí tự khoảng trắng. Vì vậy, \S tương đương với [^\s]:

Tương đương với:

Một danh sách các kí tự tắt dùng để so khớp với các kí tự khoảng trắng:

Dấu chấm (dot)

Chúng ta có thể dùng dấu chấm để so khớp với mọi kí tự. Ví dụ gõ dấu chấm và chọn global (g) thì kết quả:

Chúng ta có thể gõ 8 dấu chấm (……..) để so khớp với 8 kí tự (và cách này không bao giờ dùng), nhưng một cách biểu diễn khác là .{8}, kết quả:

Nếu chúng ta muốn so khớp với một từ bắt đầu bằng chữ H theo sau là 2 kí tự bất kỳ và kết thúc là chữ e, chúng ta có thể dùng regular expression như sau:


\bH.{2}e\b

với \b để đánh dấu kí tự biên (bắt đầu hay kết thúc). Kết quả trên RegExr:

Nếu chúng ta dùng .* hay .+ thì toàn bộ hàng đầu tiên được chọn vì dấu chấm không so khớp với các kí tự newline như new feed hay carriage return. + hay * là các lượng từ (quantifiers) được dùng để chọn nhiều kí tự nhất có thể nên còn được gọi là các lượng từ tham lam (greedy):

(* Lưu ý không chọn global (i))