Tìm hiểu về xử lý chuỗi bằng Regex (phần II)

Trong phần tìm hiểu về Regular Expression hôm nay thì mình xin giới thiệu tiếp những quy tắc căn bản trong Regular Expression. Các bạn có thể quay về phần I để tham khảo thêm một số quy tắc mà mình đã đề cập đến ở bài trước: https://viblo.asia/p/tim-hieu-ve-xu-ly-chuoi-bang-regex-phan-i-gDVK2aLA5Lj

  1. Regex đại diện cho một ký tự Giả sử mình muốn một Regex chấp nhận một ký tự bất kì nào đó thì trong Regular Expression đã cho ta một cách đó là dùng ký tự “.” để định nghĩa cho một kí tự bất kì Ví dụ: Pattern: /^.{0,7}$/gm Kết quả: Sẽ trả về chuỗi ký tự bất kỳ có chiều dài từ 0 đến 7 ký tự Pattern: / [A-Z]ramgia .iet .am /gm Kết quả: Sẽ khớp với chuỗi ký tự “Framgia Viet Nam”. Mỗi dấu chấm trong pattern sẽ đại diện cho một ký tự bị khuyết trong chuỗi. Như ở trên thì dấu “.” thứ nhất đại diện cho ký tự V và dấu “.” thứ hai đại diện cho ký tự N

  2. Phân biệt ký tự thường và ký tự là từ khóa của regex Những ký tự như dấu chấm “.”, mở ngoặc và đóng ngoặc vuông [], hoặc những ký tự liên quan đến quy tắc của Regular Expression như *, +, ? đều được quy về dạng ký tự đặc biệt trong Regular Expression. Vì thế để phân biệt giữa ký tự đặc biệt Regex và ký tự bình thường thì ta thêm dấu \ vào đầu ký tự đó. Ví dụ: Pattern: /Fr\[[a-z]{0,2}\][a-z]{0,3}/gm Kết quả: Ở ví dụ trên 2 ký tự \ đứng trước cặp ký tự [] giúp regex phân biệt được cặp ký tự [] này trong chuỗi Fr[am]gia. Giúp regex phân biệt được với cặp ký tự [] trong biểu thức [a-z] (pattern match với chuỗi ký tự từ a-z) mà ta đã biết ở phần trước.

  3. Regex A hoặc B Giả sử mình cần kiểm tra chuỗi = 'A' hoặc = 'B' sẽ trả về đúng thì ta dùng dấu |, đây là kí hiệu biểu diễn mối quan hệ OR. Ví dụ: Pattern: /Framgia|VietNam|DaNang/gm Kết quả: Sẽ khớp với các chuỗi có tồn tại một trong ba chuỗi “Framgia” hoặc “VietNam” hoặc“DaNang” Chuỗi "Japan" sẽ không khớp vì không nằm trong pattern

  4. Ký tự *, +, ? trong Regex Ký tự * đại diện cho không hoặc nhiều ký tự, tương tự với biểu thức {0,} Pattern: /Fram.*/gm Kết quả: Sẽ khớp với chuỗi “Framgia Viet Nam” và chuỗi “Fram”, ký tự * đại diện cho phần ký tự còn lại sau chuỗi “Fram”

    Ký tự + đại diện cho một hoặc nhiều ký tự, tương tự với biểu thức {1,} Pattern: /Fram.+/gm Kết quả: Sẽ khớp với chuỗi “Framgia Viet Nam”, ký tự + đại diện cho phần ký tự còn lại sau chuỗi “Fram”. Tuy nhiên sẽ không khớp với chuỗi “Fram” ở dưới, vì sau chuỗi "Fram" không còn ký tự nào. Ký tự ? đại diện cho không hoặc 1 ký tự, tương tự với biểu thức {0,1} Pattern: /Fram.?/gm Kết quả: Sẽ chỉ khớp với chuỗi “Framg” trong chuỗi “Framgia Viet Nam” và chuỗi “Fram” ở dưới bởi vì sau chuỗi "Fram" nó chỉ khớp với một ký tự hoặc không ký tự nào.

Qua bài viết này mình đã giới thiệu thêm 1 số quy tắc cơ bản của Regex, bài sau mình sẽ giúp các bạn tìm hiểu thêm về các quy tắc cơ bản và nâng cao khác của Regex.