Regular Expression trong C#

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. Mời bạn đọc tham khảo bài viết dưới đây của eLib để hiểu rõ hơn về Regex nhé!

Regular Expression trong C#

1. 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

2. 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.

3. 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 Csharp
{
    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 Csharp
{
    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 Csharp
{
    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-

4. 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/

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 Csharp
{
    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

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

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ừ

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, Ap

Trên đây là bài viết của eLib.VN về Regular Expression trong C#. 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. Bạn đọc cần lưu ý. 

Ngày:31/10/2020 Chia sẻ bởi:Tuyết

CÓ THỂ BẠN QUAN TÂM