Regex là gì?
Regex(Regular Expression) chính là biểu thức chính quy. Nếu bạn là nhân viên IT hẳn sẽ rất quen thuộc với việc dùng Regex để tiến hành so khớp(kiểm tra tính hợp lệ) của ký tự trong chuỗi. Ví dụ: Địa chỉ email, Số điện thoại hay url web,…
Regex(Regular Expression) chính là biểu thức chính quy
Mỗi một ngôn ngữ lập trình đều có cách thể hiện Regular Expression khác nhau. Nhưng, điều này không hề ảnh hưởng tới các hoạt động của biểu thức.
Có thể nói, Regular Expression được mô tả lần đầu vào năm 1951 bởi Stephen Cole Kleene qua cách dùng ký hiệu toán học. Ông gọi đó là Regular Events, tức sự kiện thường xuyên. Cuối thế kỷ thứ 20, việc dùng biểu thức này mới phổ biến hơn trong khoa học máy tính.
Ứng dụng của Regex
Đến đây hẳn bạn đã biết được Regex là gì rồi phải không. Vậy biểu thức này được ứng dụng như thế nào? Chúng ta hãy cùng khám phá tiếp trong phần bên dưới nhé:
Ứng dụng của biểu thức chính quy trong kiểm tra tính hợp lệ, so khớp
Đây là ứng dụng điển hình và được nhiều lập trình viên dùng nhất hiện nay. Một số ứng dụng của biểu thức thường gặp như:
- Kiểm tra hợp lệ của Email.
- So khớp và tiến hành kiểm tra URL có hợp lệ không.
- Kiểm tra số điện thoại hợp lệ.
- So khớp những ký tự nằm trong cùng chuỗi bắt đầu từ a kết thúc z.
- …
Hay nói cách khác với Regular Expression bạn có thể tìm kiếm, kiểm tra tính hợp lệ của bất cứ thứ gì miễn là chúng có quy tắc rõ ràng.
Ví dụ: Nếu muốn tìm chuỗi ký tự ngẫu nhiên bởi chữ(bắt đầu từ a và kết thúc z) và giữa có số, lúc này bạn có thể viết biểu thức như sau: “^a.*[0-9].*z$”.
Viết biểu thức ^a.*[0-9].*z$ và nhập vài chuỗi ngẫu nhiên bạn sẽ tìm được 2 chuỗi phù hợp là a3w32525z và aGrfo1213z
Sau đó bạn nhập 1 vài chuỗi ngẫu nhiên vào, hệ thống sẽ phát hiện 2 chuỗi đáp ứng chính xác điều kiện bắt đầu từ chữ a kết thúc z và có số ở giữa là: a3w32525z và aGrfo1213z.
Ứng dụng trong tìm kiếm, thay thế
Hẳn khi thao tác trong Word bạn đã từng dùng Ctrl + H để tìm kiếm từ hay ký tự nào đó rồi phải không? Tương tự, trong phần mềm lập trình kết hợp Regex, bạn có thể dễ dàng tìm và thay thế chữ, kỹ tự mình muốn với thao tác Ctrl + H.
Ví dụ: Bạn có loạt link và muốn chuyển https://www.tên-miền.xxx thành tên-miền.xxx. Khi dùng if/else chúng ta sẽ tốn nhiều thời gian.
Những link https://www.tên-miền.xxx
Nhưng, với Regular Expression bạn chỉ cần thực hiện 2 dòng lệnh tại Find và Replace sau:
- $2> tại Replace.
- (http://www.(+)) tại Find.
Kết quả như ảnh sau:
Tất cả các link trên sẽ chuyển thành dạng: tên-miền.xxx
Ngoài ra bạn có thể tùy biến thêm, đồng thời thực hiện những hoạt động khác như: kết hợp Grep, tách chuỗi… để giảm thời gian làm việc.
Ý nghĩa của những ký tự trong Regex
Các kỹ tự trọng Regex có ý nghĩa như thế nào? Hãy cùng chúng tôi khám phá chi tiết qua những gợi mở tiếp theo nhé bạn:
Ký tự ranh giới
Ranh giới gồm có những ký tự như sau: b, B ^ và $. Mỗi ký tự này cũng đều có ý nghĩa khác nhau, cụ thể:
Ký tự ranh giới
Ký tự |
Ý nghĩa |
✅ b |
Tức là xác định ranh giới của các từ. |
✅ B |
Đây chính là phủ định của b. |
✅ ^ |
Bạn có thể hiểu ký tự này là xác định vị trí đầu dòng. |
✅ $ |
Đây là vị trí kết thúc trong dòng. |
So khớp cơ bản
So khớp cơ bản gồm các chuỗi như d, D, w, W…. Mỗi chuỗi đều mang một ý nghĩa khác nhau, cụ thể:
Chuỗi |
Ý nghĩa |
✅ . |
Chuỗi này khớp với mọi ký tự. |
✅ d |
Chuỗi này chỉ khớp với các ký tự từ 0 đến 9. |
✅ D |
Đây là phủ định của chuỗi d. |
✅ w |
Chuỗi khớp với những chữ tiếng anh, số và dấu _. |
✅ W |
Đây chính là phủ định của chuỗi w. |
✅ t |
Chuỗi này khớp với dấu tab. |
✅ n |
Khớp new line(tức là xuống hàng). |
✅ s |
Khớp dấu trắng(dấu cách, n và t). |
✅ S |
Đây là phủ định của chuỗi s. |
Kết hợp chuỗi so khớp
Kết hợp những chuỗi so khớp với nhau thông khá đơn giản bằng cách cho chúng vào ngoặc vuông. Ví dụ:
- [abc]: Khớp với những ký tự a/b/ c.
- [a-fA-Z]: a-f chính là tất cả những ký tự từ a cho tới f ở bảng chữ cái tiếng anh. Tương tự A-Z cũng vậy nhưng là từ A hoa tới Z hoa. Như vậy chuỗi này khớp với tất cả mọi ký tự thuộc bảng chữ cái của tiếng anh.
- [d,]: Khớp các ký tự dấu , hoặc số.
Ngoài ra bạn còn có thể loại trừ những giá trị không mong muốn như sau:
- [^a-z]: Trừ những ký tự thuộc bảng chữ cái tiếng anh, chuỗi này khớp với mọi ký tự còn lại.
- [^ueoai]: Khớp với những ký tự trừ nguyên âm tiếng anh.
Sử dụng/trong Regex
Nhiều khi bạn muốn tiến hành so khớp giá trị này hoặc là giá trị kia. Ví dụ số điện thoại tại Việt Nam bắt đầu từ 84/0 hoặc +84.
Chuỗi (0|84|+84) trong Regex
Lúc này bạn hãy dùng chuỗi (0|84|+84). Bạn hãy lưu ý dấu + ở đây kaf ký tự định lượng, chính vì vậy cần có dấu ở trước.
Tuy nhiên nếu không muốn tiếp tục dùng cụm giá trị đầu số này, bạn có thể thay thế bằng (?:0|84|+84) cho Regex ở trên để tối ưu tốc độ xử lý.
Ký tự định lượng
Định lượng có những ký tự sau: X*, X+, X?, X{m}, X{m,}, X{m,n}. Mỗi kỹ tự cũng có ý nghĩa khác nhau, cụ thể:
Ký tự |
Ý nghĩa |
✅ X* |
Tức là so khớp lặp lại biểu thức X 0 hoặc là vô số lần. |
✅ X+ |
Bạn có thể hiểu ký tự này là so khớp lặp biểu thức X 1 hay vô số lần. |
✅ X? |
Đây chính là so khớp lặp biểu thức X 1 hoặc 0 lần. |
✅ X{m} |
So khớp lặp biểu thức X đúng m lần. |
✅ X{m,} |
Tức là so khớp lặp X m hay nhiều hơn m lần. |
✅ X{m,n} |
So khớp lặp biểu thức X từ m đến n lần, gồm cả m và n. |
Ký tự đặc biệt của Regular Expression
Trong ngôn ngữ lập trình sẽ có những từ khóa bạn không được khai báo trùng. Regular Expression cũng vậy, bó có ký tự đặc biệt với vai trò quan trọng. Nếu như muốn sử dụng bạn cần báo cho nó biết.
Cụ thể, ký tự {}[]()^$.|*+? cùng dấu – trong cặp ngoặc vuông. Nếu như muốn dùng các ký tự đó để so khớp bạn cần phải thêm dấu vào trước.
Ví dụ: . khớp dấu chấm (.) còn \ khớp ký tự .
Một số biểu thức chính quy được dùng phổ biến
Hiện nay có rất nhiều Regex được sử dụng. Tuy nhiên dưới đây là một số biểu thức chính quy phổ biến nhất bạn có thể tham khảo:
Biểu thức so khớp URL
Biểu thức so khớp Email
Ứng dụng |
Biểu thức |
✅ So khớp các số điện thoại ở Việt Nam |
+?(0|84)d{9} |
✅ So khớp những tên riêng viết hoa |
(?:[A-Z]p{L}+ ){1,3}[A-Z]p{L}+ |
✅ Kiểm tra thẻ HTML |
<[^>]*> |
✅ So khớp URL |
|
✅ So khớp Email |
|
Lưu ý: Bạn có thể thêm hoặc bỏ ký tự ^ và $ nếu cần.
Câu hỏi thường gặp về Regular Expression
Dưới đây là một số câu hỏi thường gặp về các biểu thức Regular Expression:
Học Regex ở đâu?
Nếu như muốn hiểu sâu hơn về Regex bạn có thể truy cập địa chỉ RegexLib.com. Đây là nơi lý tưởng để học biểu thực chính thức.
Tại web này bạn sẽ được giới thiệu, đồng thời có thể tìm kiếm được hầu hết mọi hướng dẫn để dùng Regex.
Cần lưu ý gì khi dùng biểu thức chính quy?
Khi viết ra Regex, trước hết bạn cần ghi chú biểu thức đó bạn đang dùng để xử lý gì. Không nên tin tưởng tuyệt đối vào trí nhớ của mình dù siêu phầm cỡ nào.
Việc ghi chú các biểu thức Regular Expression ra giấy này sẽ hữu ích cho cả quá trình lập trình tiếp theo của bạn nữa đấy.
Những trang nào giải đáp được ý nghĩa Regex?
Để giải đáp ý nghĩa biểu thức bạn có thể truy cập vào các trang như rubular.com hoặc Regex101.com.
Bạn chỉ cần viết Regex vào, sau đó bạn tiến hành nhập những chuỗi thử nghiệm là xong. Đây chính là các web khá tốt để sáng tạo và kết hợp biểu thức của riêng mình.
Kết luận
Hy vọng với những chia sẻ trên bạn đã hiểu rõ hơn về Regex và sự lợi hại của các biểu thức chính quy. Theo dõi web ITNavi để đón đọc nhiều bài viết hay khác bạn nhé!