Explore all courses in this category.
Explore all courses in this category.
Nguyễn Đình Cường
0 comment
09 Nov, 2026
Regex (biểu thức chính quy) nổi tiếng là khó đọc, nhưng nếu nắm được vài khối xây dựng cơ bản và biết cách viết từng bước, nó trở thành công cụ rất mạnh để tìm kiếm, kiểm tra và thay thế văn bản. Bài này giới thiệu các ký hiệu quan trọng và vài mẹo để regex dễ đọc, dễ bảo trì.
| Ký hiệu | Ý nghĩa | Ví dụ |
|---|---|---|
| . | Một ký tự bất kỳ (trừ xuống dòng) | a.c khớp "abc", "a1c" |
| \d | Một chữ số | \d\d khớp "42" |
| \w | Chữ, số hoặc dấu gạch dưới | \w+ khớp "user_1" |
| \s | Khoảng trắng (space, tab, xuống dòng) | a\sb khớp "a b" |
| [abc] | Một ký tự trong tập | [aeiou] khớp nguyên âm |
| [a-z] | Một ký tự trong khoảng | [0-9] tương đương \d |
| [^abc] | Một ký tự không thuộc tập | [^0-9] không phải chữ số |
| ^ và $ | Đầu và cuối chuỗi | ^abc$ khớp đúng "abc" |
*: 0 lần hoặc nhiều lần.+: 1 lần hoặc nhiều lần.?: 0 hoặc 1 lần (tùy chọn).{3}: đúng 3 lần; {2,5}: từ 2 đến 5 lần; {2,}: ít nhất 2 lần.Mặc định lượng từ là "tham lam" (lấy nhiều nhất có thể). Thêm ? phía sau (như .*?) để chuyển sang "lười", lấy ít nhất có thể. Khác biệt này rất quan trọng khi tìm nội dung giữa hai dấu như thẻ HTML hay dấu nháy.
(abc): nhóm và ghi nhớ kết quả (nhóm bắt) để lấy hoặc dùng lại.(?:abc): nhóm nhưng không ghi nhớ.a|b: hoặc a hoặc b, ví dụ (?:jpg|png|gif).(?<ten>...): nhóm bắt có tên (được nhiều ngôn ngữ hỗ trợ), giúp đọc kết quả dễ hơn.// JavaScriptconst phoneRegex = /^(0|\+84)(3|5|7|8|9)\d{8}$/;console.log(phoneRegex.test('0912345678')); // trueconsole.log(phoneRegex.test('+84912345678')); // trueconsole.log(phoneRegex.test('12345')); // falseĐây là mẫu đơn giản để minh họa, thực tế đầu số có thể thay đổi nên khi làm sản phẩm thật hãy kiểm tra theo quy định hiện hành hoặc dùng thư viện chuyên dụng.
# Pythonimport retext = "Hạn nộp bài: 2025-03-14, nhắc lại vào 2025-03-10"dates = re.findall(r"\d{4}-\d{2}-\d{2}", text)print(dates) # ['2025-03-14', '2025-03-10']import rem = re.match(r"(?P<user>[\w.]+)@(?P<domain>[\w.]+)", "an.nguyen@example.com")print(m.group("user")) # an.nguyenprint(m.group("domain")) # example.comre.VERBOSE cho phép viết regex nhiều dòng kèm chú thích.r"..." trong Python để không phải nhân đôi dấu gạch chéo ngược.^ và $ để toàn bộ chuỗi phải khớp, tránh khớp một phần.import rephone = re.compile(r"""^(?:0|\+84) # đầu số quốc gia hoặc số 0[35789] # đầu số nhà mạng\d{8}$ # 8 chữ số còn lại""", re.VERBOSE). * + ? ( ) [ ] { } | \ ^ $ khi muốn khớp chính chúng.(a+)+) có thể làm chương trình treo với chuỗi đầu vào xấu. Cẩn thận khi áp dụng regex lên dữ liệu do người dùng gửi lên.Bạn không cần thuộc hết cú pháp regex. Hãy nắm các khối cơ bản, xây từng bước nhỏ, kiểm thử với công cụ trực quan và đừng ngại viết chú thích cho chính mình. Regex dùng đúng chỗ sẽ tiết kiệm rất nhiều dòng code.
Nếu bạn muốn luyện xử lý chuỗi và nhiều kỹ năng lập trình khác qua bài tập, hãy xem thêm trên codebem.com.
Nguyễn Đình Cường
0 comment