Để hiểu rõ về Biểu thức chính quy (Regular Expression) trong C#, hãy đọc tiếp bài viết dưới đây của Mytour.
Biểu thức chính quy (Regular Expression) trong C# là công cụ mạnh mẽ, chúng ta sẽ khám phá chi tiết cách sử dụng nó trong lập trình C#.
1. Sức mạnh của Biểu thức chính quy (Regular Expression) trong lập trình C#.
2. Verbatim String Literal trong C#.
3. Khám phá cách khớp chuỗi trong lập trình C#.
4. Bí mật của Capture group trong lập trình C#.
5. Bước vào thế giới Tìm và thay thế chuỗi trong C#.
6. Khám phá từ A đến Z về RegexOptions Enum trong lập trình C#.
7. Chiến lược Biên dịch pattern trong lập trình C#.
1. Sức mạnh của Biểu thức chính quy (Regular Expression) trong lập trình C#
C# mang đến sức mạnh của biểu thức chính quy thông qua các lớp trong namespace System.Text.RegularExpressions trong .NET framework chuẩn. Mặc dù có một số khác biệt về tính năng nâng cao so với PCRE, nhưng cả hai đều chia sẻ phần lớn cú pháp và pattern có thể được sử dụng trong C# và nhiều ngôn ngữ khác nhau.
Ví dụ dưới đây sẽ minh họa cách sử dụng biểu thức chính quy một cách hiệu quả trong lập trình C#. Lưu ý rằng khi thử nghiệm mã nguồn, bạn cần nhập namespace ở đầu file nguồn.
Sử dụng thư viện: System.Text.RegularExpressions;
2. Chuỗi Đặc biệt trong C#
Khi xây dựng biểu thức chính quy trong C#, nên ưa chuộng sử dụng chuỗi đặc biệt thay vì chuỗi thông thường. Chuỗi đặc biệt thường bắt đầu với tiền tố đặc biệt (@) và C# sẽ không diễn giải các dấu gạch chéo ngược cũng như ký tự đặc biệt trong chuỗi. Điều này giúp bạn truyền chúng trực tiếp vào biểu thức chính quy mà không cần escape quá nhiều.
Điều này có nghĩa là các mẫu như '\n\w' sẽ không cần phải thêm ký tự escape và có thể được viết gọn thành @'\n\w' thay vì \\n\\w <\\n\\w>, giúp mã nguồn trở nên dễ đọc hơn.
3. Tìm Kiếm Chuỗi Trong C#
Trong không gian tên System.Text.RegularExpressions, lớp Regex đóng vai trò gói gọn giao diện cho công cụ biểu thức chính quy, giúp bạn thực hiện quá trình tìm kiếm và trích xuất thông tin từ văn bản sử dụng biểu thức chính quy.
Để kiểm tra xem một biểu thức chính quy có khớp với một chuỗi hay không, bạn có thể sử dụng phương thức tĩnh Regex.Match() với các tùy chọn của enum RegexOptions. Điều này trả về đối tượng Match chứa thông tin về vị trí tìm thấy kết quả khớp (nếu có).
Phương thức: Match match = Regex.Match(ChuoiNguon, Mau, RegexOptions)
Dưới đây là một ví dụ về việc khớp chuỗi trong C#:
4. Nhóm Capture Trong C#
Nếu bạn muốn thực hiện tìm kiếm toàn cầu (global search) trên toàn bộ chuỗi đầu vào và trả về tất cả các kết quả khớp với dữ liệu capture tương ứng, bạn có thể sử dụng phương thức tĩnh Regex.Matches() để có được MatchCollection. Sau đó, bạn có thể lặp lại và xử lý chúng như trong ví dụ trên.
Phương thức
Danh sách Match: matches = Regex.Matches(InputStr, Pattern, RegexOptions)
Dưới đây là một ví dụ về Capture group trong C#:
5. Tìm và Thay Thế Chuỗi Trong C#
Một trong những nhiệm vụ phổ biến khác là tìm và thay thế một phần của chuỗi bằng cách sử dụng biểu thức chính quy. Chẳng hạn, tìm và thay thế tất cả các phiên bản của tên miền email cũ hoặc sắp xếp thứ tự văn bản. Để thực hiện điều này trong C#, chúng ta sẽ sử dụng phương thức tĩnh Regex.Replace().
Đối với chuỗi thay thế, bạn có thể sử dụng một biểu thức chính quy chứa các tham chiếu đến các nhóm capture trong pattern hoặc chỉ đơn giản là một chuỗi thông thường.
Phương thức:
string replaced = Regex.Replace(InputStr, Pattern, ReplacementPattern, RegexOptions)
6. Enum RegexOptions trong C#
Các phương thức biểu thức chính quy trên đều có đối số RegexOptions tùy chọn. Hầu hết các flag có sẵn có thể được thêm trực tiếp vào biểu thức chính quy, hữu ích trong một số trường hợp cụ thể. Cụ thể:
- RegexOptions.Compiled tối ưu hóa quá trình khớp nhiều chuỗi đầu vào với cùng một pattern bằng cách biên dịch pattern trước. Mặc định không có tùy chọn nào được thiết lập.
- RegexOptions.IgnoreCase tạo pattern không phân biệt chữ hoa chữ thường.
- RegexOptions.Multiline cần thiết khi chuỗi đầu vào có ký tự xuống dòng (\n) và cho phép metacharacter (^ và $) áp dụng cho mỗi dòng thay vì toàn bộ chuỗi.
- RegexOptions.RightToLeft sử dụng cho ngôn ngữ RTL.
- RegexOptions.Singleline cho phép metacharacter (.) khớp với mọi ký tự, kể cả xuống dòng (\n).
7. Biên dịch pattern
Mặc dù các phương thức tĩnh xử lý các tác vụ thông thường, nhưng nếu bạn phải kiểm tra hàng triệu chuỗi cùng pattern, bạn có thể cải thiện hiệu suất bằng cách khởi tạo đối tượng Regex với pattern trong constructor.
Với đối tượng Regex này, tất cả các phương thức trên đều sẵn trong đối tượng, trừ việc không cần truyền lại pattern trong mỗi lần gọi.
Trong bài viết này, Mytour đã giới thiệu chi tiết về biểu thức chính quy (Regular Expression) trong C#. Nếu có bất kỳ thắc mắc hoặc câu hỏi nào cần giải đáp như Khái niệm về Tính đa hình trong C#, bạn đọc hãy để lại ý kiến của mình trong phần bình luận dưới bài viết. Đội ngũ Mytour sẽ nhanh chóng giải đáp mọi thắc mắc của bạn.
