Chúng ta đã làm quen với lớp kí tự từ các phần trước, trong phần này chúng ta sẽ ôn lại một số nội dung:

  • Lớp kí tự (character classes)
  • Phủ định lớp kí tự (negated character classes)
  • Tổng và hiệu các lớp kí tự (Union and difference)

Công cụ dùng trong chương này là Rubular.

Lớp kí tự

Lớp kí tự (character class) dùng để so khớp với các kí tự cụ thể hay một chuỗi kí tự cụ thể. Ví dụ so khớp với các số từ 0 đến 9 chúng ta có thể dùng


[0123456789]

hay


[0-9]

hay dùng kí hiệu tắt \d.

Nhưng nếu chúng ta muốn so khớp với các số chẵn từ 10 đến 19? Giải pháp như pattern sau:

\b[1][24680]\b, kết quả trong Rubular:

Nếu so khớp với các số chẵn từ 0 đến 99: \b[24680\b|\b[1-9][24680]\b (subpattern đầu để so khớp các số chẵn từ 0 đến 9, subpattern thứ hai dùng để so khớp các số chẵn từ 10 đến 99 ).

Đề so khớp các số hệ thập lục phân (16) có thể dùng pattern:


[a-zA-Z0-9]

Phủ định lớp kí tự

Dùng kí hiệu ^ để phủ định lớp kí tự tức là không so khớp với các kí tự trong lớp kí tự. Ví dụ không chọn ABC trong pattern [^ABC], kết quả trong Rubular:

Tổng và hiệu các lớp kí tự

Chúng ta có thể xem các lớp kí tự như các tập hợp. Tập hợp có hai thao tác cơ bản là tổng (hay hợp) và hiệu và lớp kí tự cũng vậy. Giả sử chúng ta muốn lấy tồng hai lớp kí tự [0-3] và [6-9], chúng ta có pattern: [0-3[6-9]], kết quả trong Rubular:

Chúng ta muốn so khớp các số từ 0 đến 9 nhưng không so khớp với 3, 5, 7, pattern như sau: [0-9&&[^357]], kết quả trong Rubular: