Regex Cheat Sheet và Các Mẫu Phổ Biến
Regex, hay biểu thức chính quy, là công cụ khớp mẫu mạnh mẽ được sử dụng trong hầu hết mọi ngôn ngữ lập trình và trình soạn thảo văn bản. Mặc dù cú pháp thoạt nhìn có vẻ khó hiểu, nhưng thành thạo regex cho phép bạn tìm kiếm, xác thực, trích xuất và chuyển đổi văn bản một cách chính xác mà các thao tác bằng mã thủ tục có thể cần hàng chục dòng để thực hiện. Hướng dẫn này bao gồm cú pháp cơ bản, các mẫu phổ biến và mẹo thực tế bạn cần biết.
Cheat Sheet Cú Pháp Regex Cơ Bản
Lớp Ký Tự
| Mẫu | Ý Nghĩa | Ví Dụ |
|---|---|---|
| . | Ký tự bất kỳ trừ dòng mới | a.c khớp abc, a1c, a c |
| \d | Chữ số bất kỳ (0-9) | \d\d khớp 42 |
| \D | Ký tự không phải chữ số | \D khớp a, !, dấu cách |
| \w | Ký tự từ (a-z, A-Z, 0-9, _) | \w+ khớp hello_123 |
| \W | Ký tự không phải từ | \W khớp @, #, dấu cách |
| \s | Ký tự khoảng trắng (dấu cách, tab, dòng mới) | a\sb khớp a b |
| \S | Ký tự không phải khoảng trắng | \S+ khớp hello |
| [abc] | Ký tự bất kỳ trong tập hợp | [aeiou] khớp nguyên âm |
| [^abc] | Ký tự bất kỳ không trong tập hợp | [^0-9] khớp không phải chữ số |
| [a-z] | Phạm vi ký tự | [A-Za-z] khớp chữ cái bất kỳ |
Lượng Từ
| Mẫu | Ý Nghĩa | Ví Dụ |
|---|---|---|
| * | Không hoặc nhiều lần | ab*c khớp ac, abc, abbc |
| + | Một hoặc nhiều lần | ab+c khớp abc, abbc |
| ? | Không hoặc một lần | colou?r khớp color, colour |
| {n} | Chính xác n lần | \d{4} khớp 4 chữ số |
| {n,} | n lần trở lên | \d{2,} khớp 2 chữ số trở lên |
| {n,m} | n đến m lần | \d{3,5} khớp 3-5 chữ số |
Neo và Ranh Giới
| Mẫu | Ý Nghĩa | Ví Dụ |
|---|---|---|
^
| Start of string or line | ^Hello matches Hello at start |
$
| End of string or line | world$ matches world at end |
\b
| Word boundary | \bcat\b matches cat alone |
\B
| Non-word boundary | \Bcat matches scattered |
Nhóm và Luân Phiên
| Mẫu | Ý Nghĩa | Ví Dụ |
|---|---|---|
(abc)
| Capturing group | (ab)+ matches abab |
(?:abc)
| Non-capturing group | (?:ab)+ matches abab |
a|b
| Alternation (or) | cat|dog matches cat or dog |
\1
| Backreference to group 1 | (\w)\1 matches aa, bb |
(?<name>abc)
| Named capturing group | Referenced as name |
Các Mẫu Regex Phổ Biến
Dưới đây là các mẫu regex được sử dụng phổ biến nhất trong phát triển web và xác thực dữ liệu:
Xác Thực Email
Một regex email thực tế có thể bắt hầu hết các địa chỉ không hợp lệ mà không quá nghiêm ngặt: ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ . Mẫu này xác thực cấu trúc email cơ bản trong khi cho phép các ký tự phổ biến trong phần local và yêu cầu tên miền hợp lệ với TLD ít nhất hai ký tự.
Xác Thực URL
Khớp URL HTTP và HTTPS: ^https?:\/\/(www\.)?[a-zA-Z0-9-]+\.[a-zA-Z]{2,}(\/[^\s]*)?$ . Mẫu này khớp URL với tiền tố www tùy chọn, tên miền và đường dẫn tùy chọn.
Số Điện Thoại (Mỹ)
Các định dạng số điện thoại Mỹ khác nhau: ^\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}$ . Mẫu này xử lý các định dạng như (555) 123-4567, 555-123-4567 và 5551234567.
Địa Chỉ IP (IPv4)
Xác thực địa chỉ IPv4: ^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$ . Mẫu này đảm bảo mỗi octet nằm trong khoảng từ 0 đến 255.
Ngày Tháng (YYYY-MM-DD)
Định dạng ngày ISO: ^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$ . Mẫu này xác thực cấu trúc định dạng nhưng không kiểm tra ngày hợp lệ trong tháng.
Mã Màu Hex
Khớp mã màu hex CSS: ^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$ . Mẫu này khớp cả định dạng rút gọn 3 chữ số (#fff) và 6 chữ số (#ffffff).
Kỹ Thuật Nâng Cao
Lookahead và Lookbehind
Lookahead và lookbehind assertion cho phép bạn chỉ khớp khi một mẫu ở phía sau (hoặc phía trước) có (hoặc không có) một mẫu khác, mà không bao gồm văn bản xung quanh trong kết quả khớp.
- Positive lookahead (?=pattern): chỉ khớp khi mẫu ở phía sau. Ví dụ: \d(?=px) chỉ khớp các chữ số đứng trước "px".
- Negative lookahead (?!pattern): chỉ khớp khi mẫu không ở phía sau. Ví dụ: \d(?!px) khớp các chữ số không đứng trước "px".
- <=pattern): chỉ khớp khi mẫu ở phía trước. Ví dụ: (?<=\$)\d+ khớp các chữ số đứng sau ký hiệu đô la.
Tham Lam và Lười Biếng
<.*>bold<.*?>".
Mẹo Hiệu Suất Regex
- Sử dụng non-capturing group (?:) khi không cần trích xuất nội dung nhóm đã khớp
- Sử dụng possessive quantifier hoặc atomic group khi được hỗ trợ để tránh backtracking quá mức
- Sử dụng lớp ký tự cụ thể thay vì sử dụng rộng rãi metacharacter dấu chấm
- Neo mẫu của bạn với ^ và $ khi cần khớp toàn bộ chuỗi
- Biên dịch trước mẫu regex khi sử dụng lặp lại trong vòng lặp
- Sử dụng ranh giới từ \b thay vì ^ và $ khi tìm kiếm trong văn bản lớn
Kiểm Tra và Gỡ Lỗi Regex
Trước khi triển khai mẫu regex, hãy luôn kiểm tra với đầu vào thực tế. Sử dụng trình kiểm tra regex tương tác có thể làm nổi bật kết quả khớp theo thời gian thực và giải thích từng phần của mẫu. Điều này giúp bạn phát hiện các trường hợp biên và hiểu tại sao mẫu khớp hoặc không khớp với đầu vào cụ thể. Hãy thử trình kiểm tra regex miễn phí của chúng tôi để xây dựng và kiểm tra mẫu của bạn một cách tương tác.
Sử dụng công cụ miễn phí của chúng tôi để xây dựng, kiểm tra và gỡ lỗi mẫu regex của bạn.
Try Our Regex TesterRegex Cheat SheetCâu Hỏi Thường Gặp
Sự khác biệt giữa regex tham lam và lười biếng là gì?
Lượng từ tham lam khớp càng nhiều văn bản càng tốt, trong khi lượng từ lười biếng khớp càng ít văn bản càng tốt. Thêm dấu hỏi sau lượng từ làm cho nó trở nên lười biếng. Ví dụ, .* khớp chuỗi dài nhất có thể, trong khi .*? khớp chuỗi ngắn nhất.
Regex có giống nhau trong tất cả ngôn ngữ lập trình không?
Không, việc triển khai regex khác nhau giữa các ngôn ngữ. Hầu hết hỗ trợ cú pháp POSIX cơ bản, nhưng các tính năng nâng cao như lookbehind, named group và hỗ trợ Unicode khác nhau. JavaScript trong lịch sử có hỗ trợ hạn chế cho regex nhưng đã bổ sung nhiều tính năng trong những năm gần đây.
Regex có thể phân tích cú pháp HTML hoặc XML không?
Không, regex không thể phân tích cú pháp HTML hoặc XML một cách đáng tin cậy vì chúng là ngôn ngữ phi ngữ cảnh lồng nhau. Regex không có khái niệm về độ sâu lồng hoặc thẻ cân bằng. Hãy sử dụng trình phân tích cú pháp HTML hoặc XML phù hợp. Regex có thể trích xuất các mẫu đơn giản từ HTML nhưng sẽ thất bại trên các cấu trúc phức tạp.
Lookahead và lookbehind trong regex là gì?
<=pattern) là positive lookbehind, khớp nếu mẫu ở phía trước. Phiên bản phủ định sử dụng ! thay vì =.
Làm thế nào để regex không phân biệt chữ hoa chữ thường?
Thêm cờ i sau dấu phân cách đóng làm cho toàn bộ mẫu không phân biệt chữ hoa chữ thường. Trong JavaScript, sử dụng /pattern/i. Trong Python, sử dụng re.IGNORECASE hoặc re.I làm cờ. Bạn cũng có thể sử dụng (?i) nội tuyến để làm cho một phần cụ thể không phân biệt chữ hoa chữ thường.
ToolHub's collection of 300+ free online tools including regex tester, cheat sheets, and more — no sign-up required.