Regex là gì?
Regex (Regular Expression) là một công cụ dùng để biểu diễn các mẫu ký tự trong chuỗi, thường được gọi là biểu thức chính quy. Trong lĩnh vực IT, Regex rất quen thuộc khi cần kiểm tra tính hợp lệ của dữ liệu, như xác thực địa chỉ email, số điện thoại hoặc URL của trang web.
Regex(Regular Expression) chính là biểu thức chính quy
Mặc dù mỗi ngôn ngữ lập trình có cách viết Regular Expression khác nhau, nhưng cách thức hoạt động của chúng vẫn giống nhau.
Regular Expression lần đầu tiên được Stephen Cole Kleene giới thiệu vào năm 1951 bằng cách sử dụng ký hiệu toán học và gọi đó là “Regular Events” (sự kiện thường xuyên). Mãi đến cuối thế kỷ 20, biểu thức này mới trở nên phổ biến trong lĩnh vực 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ế
Khi sử dụng Word, bạn có thể đã quen với việc nhấn Ctrl + H để tìm và thay thế từ hoặc ký tự. Tương tự, trong lập trình, Regex giúp bạn tìm và thay thế nội dung một cách nhanh chóng và hiệu quả.
Chẳng hạn, nếu bạn muốn chuyển hàng loạt link từ dạng https://www.tên-miền.xxx
thành tên-miền.xxx
, việc sử dụng if/else sẽ rất phức tạp và tốn thời gian. Nhưng với Regex, bạn có thể thực hiện điều này dễ dàng chỉ với một dòng lệnh.
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?
Bạn có thể sử dụng các trang web như rubular.com hoặc Regex101.com để tìm hiểu ý nghĩa của các biểu thức Regex. Chỉ cần nhập Regex và chuỗi thử nghiệm, bạn sẽ thấy cách biểu thức khớp với chuỗi như thế nào. Đây là công cụ hữu ích để bạn khám phá và tự tạo ra các biểu thức Regex cho riêng mình.
Kết luận
Hy vọng qua những thông tin trên, bạn đã hiểu rõ hơn về Regex và sức mạnh của biểu thức chính quy. Đừng quên theo dõi blog để cập nhật thêm nhiều bài viết hữu ích khác nhé!