Regex hoặc Regular Expression trong C# là một API để định nghĩa một mẫu để tìm kiếm hoặc thao tác với chuỗi. Nó được sử dụng rộng rãi để xác định ràng buộc trên các chuỗi như xác thực mật khẩu, email, kiểu dữ liệu datetime, ... Trong C#, một pattern gồm một hoặc nhiều hằng ký tự, toán tử, hoặc construct.
Nội dung chính
Construct cho định nghĩa Regular Expression trong C#
Có nhiều loại ký tự, toán tử và construct đa dạng mà giúp bạn định nghĩa Regular Expression trong C#. Bạn theo các link sau để có chi tiết về các construct này.
- Character escape
- Lớp Character
- Anchor
- Grouping construct
- Quantifier
- Backreference construct
- Alternation construct
- Substitution
- Miscellaneous constructs
Lớp Regex trong C#
Lớp Regex trong C# được sử dụng để biểu diễn một Regular Expression. Nó có các phương thức được sử dụng phổ biến sau:
STT | Phương thức |
---|---|
1 |
public bool IsMatch(string input)
Chỉ rằng có hay không Regular Expression đã cho trong Regex constructor này tìm thấy một match trong chuỗi đầu vào đã xác định |
2 | public bool IsMatch(string input, int startat)
Chỉ rằng có hay không Regular Expression đã cho trong Regex constructor này tìm thấy một match trong chuỗi đầu vào đã xác định, bắt đầu tại vị trí startat đã cho trong chuỗi |
3 | public static bool IsMatch(string input, string pattern)
Chỉ rằng có hay không Regular Expression đã cho tìm thấy một match trong chuỗi đầu vào đã xác định |
4 |
public MatchCollection Matches(string input)
Tìm kiếm chuỗi đầu vào đã xác định về tất cả sự xuất hiện của một Regular Expression |
5 | public string Replace(string input, string replacement)
Trong một chuỗi đầu vào đã xác định, thay thế tất cả chuỗi mà so khớp với một Regular Expression pattern với một chuỗi thay thế đã cho |
6 |
public string[] Split(string input)
Chia một chuỗi đầu vào thành một mảng các chuỗi phụ tại vị trí được định nghĩa bởi một Regular Expression pattern đã xác định trong Regex constructor |
Để có danh sách đầy đủ các phương thức và thuộc tính, bạn vui lòng đọc tài liệu về C# của Microsoft.
Ví dụ sử dụng Regex trong C#
Ví dụ sử dụng Regex trong C# - tìm kiếm chuỗi con
Ví dụ sau tìm các chuỗi con mà bắt đầu với chữ hoa 'L':
using System; using System.Text.RegularExpressions; namespace KienThucLapTrinhCsharp { class TestRegexCsharp { private static void showMatch(string text, string expr) { Console.WriteLine("Expression: " + expr); MatchCollection mc = Regex.Matches(text, expr); foreach (Match m in mc) { Console.WriteLine(m); } } static void Main(string[] args) { Console.WriteLine("Vi du minh hoa Regular Expression trong C#"); Console.WriteLine("-----------------------------------------"); string str = "Lua nep la lua nep lang, Lua len lop lop..."; Console.WriteLine("Tim cac tu bat dau bang chu cai 'L': "); showMatch(str, @"\bL\S*"); Console.ReadKey(); } } }
Kết quả:
Vi du minh hoa Regular Expression trong C# ----------------------------------------- Tim cac tu bat dau bang chu cai 'L': Expression: \bL\S* Lua Lua
Ví dụ sau tìm các chuỗi con với các từ mà bắt đầu với 'l' thường và kết thúc với 'n' thường:
using System; using System.Text.RegularExpressions; namespace KienThucLapTrinhCsharp { class TestRegexCsharp { private static void showMatch(string text, string expr) { Console.WriteLine("Expression: " + expr); MatchCollection mc = Regex.Matches(text, expr); foreach (Match m in mc) { Console.WriteLine(m); } } static void Main(string[] args) { Console.WriteLine("Vi du minh hoa Regular Expression trong C#"); Console.WriteLine("-----------------------------------------"); string str = "Lua nep la lua nep lang, Lua len lop lop..."; Console.WriteLine("Tim cac tu bat dau bang 'l' va ket thuc bang 'n': "); showMatch(str, @"\bl\S*n\b"); Console.ReadKey(); } } }
Kết quả:
Vi du minh hoa Regular Expression trong C# ----------------------------------------- Tim cac tu bat dau bang 'l' va ket thuc bang 'n': Expression: \bl\S*n\b len
Ví dụ sử dụng Regex trong C# - Thay thế ký tự
Ví dụ sau thay thế các white space:
using System; using System.Text.RegularExpressions; namespace KienThucLapTrinhCsharp { class TestRegexCsharp { static void Main(string[] args) { Console.WriteLine("Vi du minh hoa Regular Expression trong C#"); Console.WriteLine("-----------------------------------------"); string str1 = "Hello World "; string pattern = "\\s+"; string str2 = "-"; Regex rgx = new Regex(pattern); string result = rgx.Replace(str1, str2); Console.WriteLine("Chuoi ban dau: {0}", str1); Console.WriteLine("Chuoi sau khi da thay the: {0}", result); Console.ReadKey(); } } }
Kết quả:
Vi du minh hoa Regular Expression trong C# ----------------------------------------- Chuoi ban dau: Hello World Chuoi sau khi da thay the: Hello-World-
Cú pháp Regex trong C#
Với các cú pháp và ví dụ sau bạn có thể kiểm tra kết quả bằng cách sử dụng trang web https://regex101.com/
1. Các lớp ký tự Regex
Regex | Mô tả |
---|---|
[...] | trả về một ký tự phù hợp |
[abc] | a, b, hoặc c |
[^abc] | Bất kỳ ký tự nào ngoại trừ a, b, hoặc c |
[a-zA-Z] | a tới z hoặc A tới Z |
[0-9] | 0 tới 9 |
Ví dụ:
using System; using System.Text.RegularExpressions; namespace KienThucLapTrinhCsharp { class TestRegexCsharp { static void Main(string[] args) { Console.WriteLine("Vi du minh hoa Regular Expression trong C#"); Console.WriteLine("-----------------------------------------"); Console.WriteLine(Regex.IsMatch("a", "[a-z]")); Console.WriteLine(Regex.IsMatch("b", "[a-z]")); Console.WriteLine(Regex.IsMatch("c", "[abc]")); Console.WriteLine(Regex.IsMatch("abc", "[abc]")); Console.WriteLine(Regex.IsMatch("8", "[0-9]")); Console.WriteLine(Regex.IsMatch("a", "[0-9]")); Console.ReadKey(); } } }
Kết quả:
Vi du minh hoa Regular Expression trong C# ----------------------------------------- True True True True True False
2. Số lượng ký tự trong Regex
Số lượng trong Regex chỉ định số lượng xảy ra của một ký tự.
Regex | Mô tả | Pattern | Ví dụ |
---|---|---|---|
X? | X xảy ra một hoặc không lần | hellos? | hello, hellos, helloss |
X+ | X xảy ra một hoặc nhiều lần | Version \w-\w+ | Version A-b1_1 |
X* | X xảy ra không hoặc nhiều lần | A*B*C* | AAACC |
X{n} | X chỉ xảy ra n lần | \d{4} | 2018, 20189, 201 |
X{n,} | X xảy ra n hoặc nhiều lần | \d{4,} | 2018, 20189, 201 |
X{y,z} | X xảy ra ít nhất y lần nhưng nhỏ hơn z lần | \d{2,3} | 2018, 201 |
3. Ký tự đặc biệt trong Regex
Bảng sau dây liệt kê một số ký tự đặc biệt trong regex.
Regex | Mô tả |
---|---|
. | Bất kỳ ký tự nào |
^ | Có 2 cách sử dụng. 1. Đánh dấu bắt đầu của một dòng, một chuỗi. 2. Nếuu sử dụng trong dấu [...] thì nó có nghĩa là phủ định. |
$ | Đánh dấu Kết thúc của một dòng |
\d | Bất kỳ chữ số nào, viết tắt của [0-9] |
\D | Bất kỳ ký tự nào không phải chữ số, viết tắt của [^0-9] |
\s | Bất kỳ ký tự trống nào (như dấu cách, tab, xuống dòng, ...), viết tắt của [\t\n\x0B\f\r] |
\S | Bất kỳ ký tự trống nào không phải ký tự trống, viết tắt của [^\s] |
\w | Bất kỳ ký tự chữ nào (chữ cái và chữ số), viết tắt của [a-zA-Z_0-9] |
\W | Bất kỳ ký tự nào không phải chữ cái và chữ số, viết tắt của [^\w] |
\b | Ranh giới của một từ |
\B | Không phải ranh giới của một từ |
4. Ký tự logic trong Regex
Bảng sau liệt kê một số ký tự logic trong Regex:
Regex | Mô tả | Pattern | Ví dụ |
---|---|---|---|
| | Hoặc | 22|33 | 33 |
( … ) | Group các ký tự và chụp lại | A(nt|pple) | Ant, Apple |
\1 | Nội dung của Group 1 | r(\w)g\1x | regex |
\2 | Nội dung của Group 2 | (\d\d)\+(\d\d)=\2\+\1 | 12+65=65+12 |
(?: … ) | Group không được chụp lại, bạn không thể sử dụng \1 | A(?:nt|pple) | Ant, Apple |