Regex là gì? Hướng dẫn sử dụng Regular Expression từ A-Z

June 2026 · 10 min read

Regex (Regular Expression) là một trong những công cụ mạnh mẽ nhất mà mọi developer nên biết. Mặc dù cú pháp ban đầu看起来 phức tạp, nhưng khi掌握了 Regex, bạn sẽ tiết kiệm được hàng giờ làm việc với text. Bài viết này sẽ hướng dẫn bạn từ những khái niệm cơ bản đến các kỹ thuật nâng cao.

Regex là gì?

Regex (Regular Expression) là một chuỗi ký tự đặc biệt dùng để mô tả một mẫu tìm kiếm (pattern). Nó cho phép bạn:

  • Tìm kiếm text: Tìm tất cả các vị trí khớp với mẫu trong một chuỗi lớn.
  • Kiểm tra định dạng: Xác định xem một chuỗi có đúng định dạng (email, số điện thoại, URL...) hay không.
  • Thay thế text: Tìm và thay thế text theo pattern phức tạp.
  • Parse dữ liệu: Trích xuất thông tin từ text có cấu trúc.

Cú pháp cơ bản

Trước khi bắt đầu, hãy làm quen với các ký tự cơ bản:

Ký tự Ý nghĩa Ví dụ
.Bất kỳ ký tự nàoa.c khớp "abc", "a1c", "a c"
\dChữ số (0-9)\d\d khớp "42", "07"
\wChữ cái, số, gạch dưới\w+ khớp "hello", "test_123"
\sKhoảng trắnga\sb khớp "a b"
^Đầu chuỗi^Hello khớp "Hello world"
$Cuối chuỗiworld$ khớp "Hello world"
*0 hoặc nhiều lầnab*c khớp "ac", "abc", "abbc"
+1 hoặc nhiều lầnab+c khớp "abc", "abbc" (không khớp "ac")
?0 hoặc 1 lầncolou?r khớp "color" và "colour"

Quantifiers - Số lần lặp lại

Quantifiers xác định số lần một ký tự hoặc nhóm được lặp lại:

  • {n} - Chính xác n lần: a{3} khớp "aaa"
  • {n,} - Ít nhất n lần: a{2,} khớp "aa", "aaa", "aaaa"...
  • {n,m} - Từ n đến m lần: a{2,4} khớp "aa", "aaa", "aaaa"

Character Classes - Nhóm ký tự

Square brackets cho phép bạn định nghĩa một tập hợp ký tự:

  • [abc] - Khớp a, b hoặc c
  • [^abc] - Khớp bất kỳ ký tự nào ngoại trừ a, b, c
  • [a-z] - Khớp bất kỳ chữ cái thường nào từ a đến z
  • [A-Z] - Khớp bất kỳ chữ cái hoa nào từ A đến Z
  • [0-9] - Khớp bất kỳ chữ số nào (tương đương \d)
  • [a-zA-Z0-9] - Khớp chữ cái và chữ số (tương đương \w không kể gạch dưới)

Groups và Alternation

Groups cho phép bạn nhóm các phần của pattern:

  • (abc) - Nhóm capturing, có thể sử dụng lại với backreference
  • (?:abc) - Nhóm non-capturing, không lưu kết quả
  • a|b - Alternation: khớp "a" hoặc "b"
  • (cat|dog) - Nhóm với alternation: khớp "cat" hoặc "dog"

Ví dụ thực tế

1. Kiểm tra định dạng email

^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$

Giải thích: Bắt đầu bằng chữ cái/số/dấu特殊, theo sau là @, tên miền, dấu chấm và TLD ít nhất 2 ký tự.

2. Kiểm tra số điện thoại Việt Nam

^(0|\+84)[3|5|7|8|9]\d{8}$

Giải thích: Bắt đầu bằng 0 hoặc +84, theo sau là đầu số 3/5/7/8/9 và 8 chữ số.

3. Tìm tất cả URL trong text

https?://[^\s]+

Giải thích: http hoặc http, theo sau là :// và bất kỳ ký tự nào không phải khoảng trắng.

4. Trích xuất tên file từ đường dẫn

[^/\\]+\.[a-zA-Z]{2,4}$

Giải thích: Các ký tự không phải / hoặc \, theo sau là dấu chấm và phần mở rộng 2-4 ký tự.

Flags (Cờ)

Flags thay đổi cách Regex hoạt động:

  • g (global): Tìm tất cả kết khớp, không chỉ kết quả đầu tiên.
  • i (case-insensitive): Không phân biệt chữ hoa/thường.
  • m (multiline): ^ và $ khớp đầu/cuối mỗi dòng thay vì toàn bộ chuỗi.
  • s (dotall): . khớp cả ký tự xuống dòng.

Common Patterns thường dùng

Dưới đây là một số pattern phổ biến mà developer thường sử dụng:

  • Chỉ chữ cái: ^[a-zA-Z]+$
  • Chỉ số: ^\d+$
  • Username: ^[a-zA-Z0-9_]{3,20}$
  • Mật khẩu mạnh: ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$
  • Ngày tháng (DD/MM/YYYY): ^\d{2}/\d{2}/\d{4}$
  • Hex color: ^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$

Công cụ test Regex miễn phí

Để thực hành và kiểm tra Regex, hãy sử dụng công cụ Regex Tester của ToolHub:

  1. Truy cập ToolHub Regex Tester
  2. Nhập pattern Regex vào ô "Pattern"
  3. Nhập chuỗi text cần kiểm tra vào ô "Test String"
  4. Công cụ sẽ highlight các kết quả khớp ngay lập tức
  5. Xem thông tin chi tiết về các nhóm capturing

Những lỗi thường gặp

Khi viết Regex, hãy tránh những lỗi phổ biến sau:

  • Quên escape ký tự đặc biệt: Các ký tự như ., *, +, ?, (, ), [, ], {, }, \, ^, $, | cần được escape bằng \.
  • Greediness quá mức: .* sẽ khớp尽可能 nhiều, có thể gây unexpected results. Sử dụng .*? cho lazy matching.
  • Không anchor pattern: Không sử dụng ^$ khi cần khớp toàn bộ chuỗi.
  • Regex quá phức tạp: Nếu pattern quá dài và khó hiểu, hãy chia nhỏ thành nhiều bước.

Khi nào KHÔNG nên sử dụng Regex?

Mặc dù mạnh mẽ, Regex không phải lúc nào cũng là giải pháp tốt nhất:

  • HTML/XML parsing: Sử dụng parser chuyên dụng thay vì Regex.
  • Logic phức tạp: Nếu cần nhiều điều kiện logic, viết code thường rõ ràng hơn.
  • Hiệu suất: Một số pattern Regex có thể rất chậm trên dữ liệu lớn.
  • Bảo mật: Regex không phù hợp để validate dữ liệu đầu vào quan trọng (sử dụng whitelist thay vì blacklist).

Câu hỏi thường gặp

Regex và Regular Expression có phải là một không?

Đúng, "Regex" là viết tắt của "Regular Expression". Cả hai thuật ngữ này đều chỉ cùng một khái niệm.

Nên học Regex ở đâu?

Bạn có thể thực hành trực tiếp với công cụ Regex Tester của ToolHub. Ngoài ra, các trang như regex101.com, regexr.com cũng rất hữu ích.

Regex có giống nhau giữa các ngôn ngữ lập trình không?

Cú pháp cơ bản giống nhau, nhưng mỗi ngôn ngữ có một số khác biệt nhỏ về flags, features và cách sử dụng. JavaScript, Python, Java, PHP đều hỗ trợ Regex.

Làm sao để debug Regex phức tạp?

Sử dụng công cụ Regex Tester để test từng phần của pattern. Chia nhỏ pattern phức tạp thành các phần đơn giản hơn và test riêng biệt.

Thực hành Regex ngay với công cụ Regex Tester miễn phí của ToolHub!