Hướng dẫn sử dụng Biểu thức Chính quy (Regular Expression) trong C#

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