1. Giới thiệu
Biểu thức chính quy (Regular Expression – Regex) là một chuỗi ký tự mô tả một mẫu (pattern) dùng để kiểm tra, tìm kiếm hoặc thao tác trên chuỗi dữ liệu. Trong C#, Regex được hỗ trợ bởi namespace System.Text.RegularExpressions
.
2. Thành phần của một biểu thức chính quy
2.1 Hằng giá trị (Literal)
Là các ký tự cụ thể bạn muốn khớp. Ví dụ: abc
sẽ khớp chính xác chuỗi "abc"
.
2.2 Ký tự đại diện (Metacharacter)
Ký hiệu | Ý nghĩa |
---|---|
[0-9] hoặc \d |
Một chữ số từ 0 đến 9 |
\D |
Ký tự không phải số |
[a-z] |
Một ký tự thường từ a đến z |
[A-Z] |
Một ký tự hoa từ A đến Z |
[a-zA-Z0-9_] hoặc \w |
Một ký tự chữ, số hoặc gạch dưới |
\W |
Ký tự không thuộc \w |
. |
Bất kỳ ký tự nào trừ xuống dòng |
\s |
Khoảng trắng, tab, xuống dòng |
\S |
Ký tự không phải khoảng trắng |
[xyz] |
Một ký tự trong tập {x,y,z} |
[^xyz] |
Một ký tự không thuộc {x,y,z} |
^ |
Bắt đầu chuỗi hoặc dòng |
$ |
Kết thúc chuỗi hoặc dòng |
\A |
Bắt đầu chuỗi |
\z |
Kết thúc chuỗi |
| |
Toán tử OR (hoặc) |
( ) |
Nhóm biểu thức con |
3. Xác định số lần lặp
Ký hiệu | Ý nghĩa |
---|---|
{n} |
Chính xác n lần |
{n,} |
Ít nhất n lần |
{,m} |
Nhiều nhất m lần |
{n,m} |
Từ n đến m lần |
? |
0 hoặc 1 lần |
* |
0 hoặc nhiều lần |
+ |
1 hoặc nhiều lần |
4. Ví dụ các pattern thông dụng
// Chứng minh nhân dân (9 số)
string patternCMND = @"^[0-9]{9}$";
// Số điện thoại VN (10 hoặc 11 số, bắt đầu bằng 0)
string patternPhone = @"^(0\d{9,10})$";
// Email (mẫu cơ bản)
string patternEmail = @"^\w+@\w+\.\w{2,4}$";
// Ngày dạng dd/mm/yyyy
string patternDate = @"^\d{1,2}/\d{1,2}/\d{4}$";
// Chuỗi bắt đầu bằng From|To|Subject|Date và kết thúc bằng dấu ':'
string patternHeader = @"^(From|To|Subject|Date):$";
5. Sử dụng lớp Regex
Namespace:
using System.Text.RegularExpressions;
Các phương thức chính:
IsMatch(string input)
– Kiểm tra chuỗi có khớp pattern không.Match(string input)
– Trả về match đầu tiên (đối tượng Match).Matches(string input)
– Trả về tất cả các match (MatchCollection).Replace(string input, string replacement)
– Thay thế match bằng chuỗi khác.Split(string input)
– Tách chuỗi theo pattern.
6. Ví dụ minh họa (C#)
6.1 Kiểm tra chuỗi hợp lệ
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string cmnd = "123456789";
string phone = "0912345678";
string email = "test@example.com";
Console.WriteLine("CMND hợp lệ? " + Regex.IsMatch(cmnd, @"^[0-9]{9}$"));
Console.WriteLine("Số điện thoại hợp lệ? " + Regex.IsMatch(phone, @"^(0\d{9,10})$"));
Console.WriteLine("Email hợp lệ? " + Regex.IsMatch(email, @"^\w+@\w+\.\w{2,4}$"));
}
}
6.2 Tìm và liệt kê các chuỗi con
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string text = "aabcdefghaabcdef";
string pattern = @"a{2}b";
MatchCollection matches = Regex.Matches(text, pattern);
foreach (Match m in matches)
{
Console.WriteLine($"Tìm thấy '{m.Value}' tại vị trí {m.Index}");
}
}
}
6.3 Tách chuỗi
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string text = "Một, Hai, Ba Bốn.";
string[] parts = Regex.Split(text, @"\s|,");
foreach (string part in parts)
{
if (!string.IsNullOrWhiteSpace(part))
Console.WriteLine(part.Trim());
}
}
}
7. Lưu ý
- Dùng chuỗi verbatim
@""
để tránh phải escape quá nhiều backslash. - Đừng quên escape dấu chấm
.
bằng\.
khi muốn khớp dấu chấm thực tế. - Regex chỉ kiểm tra định dạng. Để kiểm tra logic (ví dụ ngày tháng hợp lệ), kết hợp thêm kiểm tra bằng
DateTime.TryParse
hoặc logic riêng. - Sử dụng
RegexOptions
(ví dụRegexOptions.IgnoreCase
) khi cần.
8. Tài nguyên