Tìm hiểu về Regular Expression
Mở đầu
RegEx là một khái niệm chúng ta thường xuyên gặp qua. Các master thì sẽ chẳng lạ lùng gì, còn với newbie thì cực kỳ khó hiểu và tiếp cận.
Bài viết này mình sẽ giới thiệu qua về RegEx. Khi thành thạo được công cụ này, chắc chắn cuộc sống của lập trình viên sẽ "tươi đẹp" hơn rất nhiều.
RegEx là gì ?
RegEx (Regular Expression) trong tiếng Việt được gọi là Biểu thức chính quy. Regex không phải là một ngôn ngữ lập trình, nó chỉ là một bộ cú pháp dùng để bắt chuỗi. Regex là các ký tự được kết hợp với nhau theo quy tắc để tạo nên một trình tự giúp chúng ta tìm kiếm và thay thế văn bản một cách thông minh, nhanh chóng, đơn giản và thuận tiện. Nó có thể dùng được trong hầu hết các ngôn ngữ lập trình bậc cao như Java, C#, Python, JS, PHP,…
Ứng dụng của Regular Expression
- Ứng dụng trong kiểm tra tính hợp lệ
- Kiểm tra email có hợp lệ hay không
- Kiểm tra số điện thoại ở Việt Nam
- Kiểm tra URL hợp lệ
- Kiểm tra độ dài của câu có nằm trong khoảng (a,b) hay không
- …
- Bất cứ cái gì có quy tắc bạn đều có thể kiểm tra với Regex
- Ứng dụng trong tìm kiếm và thay thế
Cú pháp của biểu thức chính quy
Chuỗi so khớp cơ bản
Chuỗi | Ý nghĩa |
---|---|
. | Khớp bất kỳ ký tự nào |
\d | Khớp với số bất kỳ từ 0 – 9 |
\D | Phủ định của \d |
\w | Khớp với các chữ cái tiếng anh, chữ số và dấu _ |
\W | Phủ định của \w |
<dấu cách> | Khớp với dấu cách(SPACE trên bàn phím) |
\t | Khớp với dấu tab |
\n | Khớp với new line(xuống hàng) |
\s | Khớp với dấu trắng bất kỳ(dấu cách, \t,\n) |
\S | Phủ định của \s |
Kết hợp các chuỗi so khớp
Bạn có thể kết hợp các chuỗi so khớp lại với nhau bằng cách đưa chúng vào trong cặp ngoặc vuông. Ví dụ :
- [abc] -> Khớp các ký tự hoặc là a, hoặc là b, hoặc là c
- [a-fA-Z] -> a-f là tất cả các ký tự từ a đến f trong bảng chữ cái tiếng anh đó, A-Z tương tự là từ A hoa đến Z hoa. Vậy là regex này khớp với mọi ký tự trong bảng chữ cái tiếng anh bất kể hoa thường.
- [\d,] -> Khớp với ký tự số hoặc dấu ,
Các ký tự ranh giới
Ký tự | Ý nghĩa | Demo |
---|---|---|
\b | Xác định ranh giới của từ | demo |
\B | Phủ định của \b | demo |
^ | Xác định vị trí bắt đầu dòng | demo |
$ | Xác định vị trí kết thúc dòng | demo |
Sử|+ dụng hoặc trong regex
(0|84|+84) : Hoặc 0, hoặc 84, hoặc +84 – demo
Các ký tự định lượng
Loại định lượng | Ý nghĩa | Demo |
---|---|---|
X* | So khớp lặp lại regex X 0 hoặc vô số lần | demo |
X+ | So khớp lặp lại regex X 1 hoặc vô số lần | demo |
X? | So khớp lặp lại regex X 0 hoặc 1 lần | demo |
X{m} | So khớp lặp lại regex X chính xác m lần | demo |
X{m,} | So khớp lặp lại regex X m hoặc nhiều hơn m lần | demo |
X{m,n} | So khớp lặp lại regex X với số lần từ m tới n(bao gồm cả m và n) | demo |
Và một số ví dụ sau:
- ab+ : khớp các chuỗi ab, abb, abbaabab,…
- (ab)+ : khớp các chuỗi ab, abab, ababab,…
Các ký tự đặc biệt
Các ký tự {}[]()^$.|*+?\
và dấu -
ở trong cặp ngoặc vuông là các ký tự đặc biệt. Nếu bạn muốn dùng nó để so khớp thì cần thêm dấu \
vào đằng trước:
Ví dụ: \.
sẽ khớp với dấu chấm .
và \\
sẽ khớp với ký tự \.
Một số RegEx được dùng phổ biến
So khớp email
^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$
^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$
^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|((a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$
^\w+[\w-\.]*\@\w+((-\w+)|(\w*))\.[a-z]{2,3}$
^.+@.+$
So khớp URL
^((https?|ftp|file):\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$
((mailto\:|(news|(ht|f)tp(s?))\://){1}\S+)
(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?
^(http|https|ftp)\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\’/\\\+&%\$#\=~])*$
So khớp SĐT ở Việt Nam
\+?(0|84)\d{9}
So khớp số nguyên
\b\d+\b
\b(?:\d{3}\.)+\d{3}\b
– demo
So khớp mã HTML
<[^>]*>
– demo
So khớp tên riêng
(?:[A-Z]\p{L}+ ){1,3}[A-Z]\p{L}+
– demo
Một số liên kết hữu ích
- Test RegEx online: https://regex101.com/
- RegEx cheetsheet: http://web.mit.edu/hackl/www/lab/turkshop/slides/regex-cheatsheet.pdf
- Thư viện regex: http://regexlib.com/
Kết bài
Trên đây là một số kiến thức "nhập môn" về RegEx. Hi vọng bài viết nhỏ này đã giúp bạn học được cú pháp viết RegEx và áp dụng vào công việc thường ngày.