ToolHub
View All Posts

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ĩaVí Dụ
.Ký tự bất kỳ trừ dòng mớia.c khớp abc, a1c, a c
\dChữ số bất kỳ (0-9)\d\d khớp 42
\DKý tự không phải chữ số\D khớp a, !, dấu cách
\wKý tự từ (a-z, A-Z, 0-9, _)\w+ khớp hello_123
\WKý tự không phải từ\W khớp @, #, dấu cách
\sKý tự khoảng trắng (dấu cách, tab, dòng mới)a\sb khớp a b
\SKý 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ĩaVí Dụ
*Không hoặc nhiều lầnab*c khớp ac, abc, abbc
+Một hoặc nhiều lầnab+c khớp abc, abbc
?Không hoặc một lầncolou?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ĩaVí 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ĩaVí 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.

Tham Lam và Lười Biếng

<.*>bold<.*?>".

Pro Tip: When extracting content between delimiters like HTML tags or quotes, always use lazy quantifiers to avoid matching too much text. Greedy matching is the most common source of regex bugs.

Mẹo Hiệu Suất Regex

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 Sheet

Câ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.