Để tìm hiểu chi tiết về biểu thức chính quy (Regular Expression) trong C# là gì, bạn đọc cùng tham khảo tiếp bài viết dưới đây của Taimienphi.vn.
Biểu thức chính quy (Regular Expression) trong C#
1. Biểu thức chính quy (Regular Expression) trong C#
C# hỗ trợ các 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ề các tính năng nâng cao mà thư viện biểu thức chính quy .NET hỗ trợ so với PCRE, tuy nhiên cả hai đều chia sẻ phần lớn cú pháp, pattern cũng như biểu thức có thể được sử dụng trong C # và các ngôn ngữ khác.
Ví dụ dưới đây minh họa cách sử dụng biểu thức chính quy trong C#. Một lưu ý nhỏ là nếu đang thử mã, bạn phải nhập namespace ở đầu file nguồn.
using System.Text.RegularExpressions;
2. Verbatim String Literal trong C#
Khi viết biểu thức chính thức trong C#, bạn nên sử dụng các chuỗi verbatim string thay vì sử dụng regular string. Verbatim string thường bắt đầu bằng một tiền tố đặc biệt (@) và tín hiệu C# không diễn giải các dấu gạch chéo ngược cũng như các ký tự đại diện đặc biệ trong chuỗi, cho phép bạn chuyển chúng trực tiếp đến các công cụ biểu thức chính quy.
Điều này có nghĩa là các pattern như "\n\w" sẽ không được biên dịch và có thể được viết là @"\n\w" thay vì \\n\\w <\\n\\w> như trong các ngôn ngữ lập trình khác, dễ đọc hơn.
3. Khớp chuỗi trong C#
Trong namespace System.Text.RegularExpressions là lớp Regex, lớp này có vai trò đóng gói giao diện cho công cụ biểu thức chính quy và cho phép bạn thực hiện khớp và trích xuất thông tin từ văn bản bằng cách 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() để lấy tập hợp các tùy chọn của các 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(InputStr, Pattern, RegexOptions)
Dưới đây là ví dụ về khớp chuỗi trong C#:
4. Capture group trong C#
Nếu muốn thực hiện tìm kiếm toàn cục (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, chúng ta có thể sử dụng phương thức tĩnh Regex.Matches () để lấy MatchCollection, có thể lặp lại và xử lý như trong ví dụ trên.
Phương thức
MatchCollection matches = Regex.Matches(InputStr, Pattern, RegexOptions)
Dưới đây là ví dụ về Capture group trong C#:
5. Tìm và thay thế chuỗi trong C#
Một trong những tác 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 như 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. Để làm được điều này trong C#, chúng ta sẽ sử dụng phương thức tĩnh Regex.Replace ().
Chuỗi thay thế có thể là một biểu thức chính quy có chứa các tham chiếu đến capture group trong pattern, hoặc chỉ là một chuỗi thông thường.
Phương thức:
string replaced = Regex.Replace(InputStr, Pattern, ReplacementPattern, RegexOption)
6. RegexOptions Enum trong C#
Trong số các phương thức biểu thức chính quy ở trên, bạn có thể nhận thấy rằng phương thức nào cũng có đối số RegexOptions tùy chọn. Hầu hết các flag có sẵn đều có thể viết trực tiếp vào biểu thức chính quy, và có thể hữu ích trong một số trường hợp cụ thể. Trong đó:
- RegexOptions.Compiled tăng tốc quá trình khớp nhiều chuỗi đầu vào với cùng một pattern bằng cách cho phép công cụ biểu thức chính quy biên dịch pattern trước. Mặc định không có tùy chọn nào được thiết lập cả.
- RegexOptions.IgnoreCase tạo pattern viết hoa để khớp với các chuỗi viết hoa khác.
- RegexOptions.Multiline là cần thiết nếu chuỗi đầu vào của bạn có các ký tự xuống dòng (\n) và cho phép metacharacter bắt đầu và kết thúc ((^ và $ tương ứng) khoeps với phần đầu và phần cuối mỗi dòng thay vì ở đầu và cuối toàn bộ chuỗi đầu vào.
- RegexOptions.RightToLeft được sử dụng để khớp trong các ngôn ngữ RTL.
- RegexOptions.Singleline cho phép metacharacter (.) khớp tất cả các ký tự, bao gồm cả ký tự xuống dòng (\n).
7. Biên dịch pattern
Mặc dù các phương thức tĩnh ở trên để xử lý các tác vụ thông thường, tuy nhiên nếu đang phải kiểm tra hàng triệu chuỗi đầu vào có cùng patter, bạn có thể giảm việc phân bổ đối tượng để 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 tương tự ở trên đều có sẵn trong đối tượng, ngoại trừ bạn không phải truyền lại pattern trong mỗi cuộc gọi.
Như vậy bài viết trên đây Taimienphi.vn vừa giới thiệu cho bạn về biểu thức chính quy (Regular Expression) trong C# là gì. Nếu có bất kỳ thắc mắc hoặc câu hỏi nào cần giải đáp như Tính đa hình trong C# là gì, bạn đọc có thể để lại ý kiến của mình trong phần bình luận bên dưới bài viết, Taimienphi.vn sẽ giải đáp các thắc mắc của bạn sớm nhất có thể.
\\n\\w>