# C# - Biểu thức chính quy: Hướng dẫn cho người mới bắt đầu
Xin chào các bạn, tương lai của các ngôi sao lập trình! ? Bạn đã sẵn sàng bắt đầu một hành trình đầy thú vị vào thế giới Biểu thức chính quy (RegEx) trong C# chưa? Đừng lo lắng nếu bạn chưa từng viết một dòng mã trước đây - Tôi ở đây để hướng dẫn bạn từng bước trong cuộc phiêu lưu này. Hãy cùng lặn sâu vào nhé!
## Biểu thức chính quy là gì?
Trước khi chúng ta bước vào phần chi tiết, hãy hiểu Biểu thức chính quy là gì. Hãy tưởng tượng bạn là một thám tử ?️♀️ đang cố tìm một mẫu cụ thể trong một biển văn bản. Biểu thức chính quy là cặp kính lúp của bạn, giúp bạn tìm kiếm, khớp và thao tác văn bản dựa trên các mẫu. Đúng là rất thú vị phải không?
## Cấu trúc để xác định Biểu thức chính quy
Bây giờ, hãy cùng nhìn vào một số khối cơ bản mà chúng ta sử dụng để tạo ra các mẫu mạnh mẽ này. Hãy nghĩ của chúng như những mảnh LEGO trong thế giới RegEx của chúng ta!
| Cấu trúc | Mô tả | Ví dụ |
|-----------|-------------|---------|
| . | Khớp bất kỳ ký tự nào ngoại trừ ký tự xuong dòng | a.c khớp với "abc", "a1c", "a@c", v.v. |
| * | Khớp không hoặc nhiều lần ký tự trước đó | ab*c khớp với "ac", "abc", "abbc", "abbbc", v.v. |
| + | Khớp một hoặc nhiều lần ký tự trước đó | ab+c khớp với "abc", "abbc", "abbbc", nhưng không phải "ac" |
| ? | Làm cho ký tự trước đó tùy chọn | colou?r khớp cả "color" và "colour" |
| ^ | Khớp đầu của một dòng | ^Hello khớp với "Hello World" nhưng không phải "Say Hello" |
| $ | Khớp cuối của một dòng | World$ khớp với "Hello World" nhưng không phải "World Cup" |
| [ ] | Khớp bất kỳ ký tự nào từ một bộ | [aeiou] khớp bất kỳ nguyên âm nào |
| [^ ] | Khớp bất kỳ ký tự nào không trong bộ | [^aeiou] khớp bất kỳ phụ âm nào |
| ( ) | Nhóm các ký tự lại với nhau | (ab)+ khớp với "ab", "abab", "ababab", v.v. |
Đừng lo lắng nếu điều này có vẻ quá tải - chúng ta sẽ sớm thấy chúng trong hành động!
## Lớp Regex
Trong C#, chúng ta sử dụng lớp `Regex` để làm việc với Biểu thức chính quy. Nó giống như con dao đa năng ? cho việc khớp mẫu. Hãy cùng xem cách sử dụng nó!
### Ví dụ 1: Tìm kiếm một mẫu đơn giản
Hãy bắt đầu với điều gì đó đơn giản. Hãy tưởng tượng bạn đang xây dựng một chương trình để kiểm tra xem địa chỉ email có hợp lệ hay không.
```csharp
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string email = "[email protected]";
string pattern = @"@.*\.";
Regex regex = new Regex(pattern);
Match match = regex.Match(email);
if (match.Success)
{
Console.WriteLine("Địa chỉ email hợp lệ!");
}
else
{
Console.WriteLine("Địa chỉ email không hợp lệ!");
}
}
}
Trong ví dụ này:
- Chúng ta tạo một đối tượng
Regex
với mẫu của chúng ta@"@.*\."
. - Mẫu này tìm kiếm một ký tự @, tiếp theo là bất kỳ ký tự nào (.*), và sau đó là một dấu chấm (\.).
- Chúng ta sử dụng phương thức
Match
để tìm mẫu này trong chuỗi email của chúng ta. - Nếu thành công, chúng ta coi email là hợp lệ.
Lưu ý, đây chỉ là một kiểm tra rất đơn giản. Việc xác thực email thực tế phức tạp hơn nhiều!
Ví dụ 2: Thay thế văn bản
Bây giờ, hãy tưởng tượng bạn đang xây dựng một ứng dụng chat, và bạn muốn thay thế tất cả các lần xuất hiện của "LOL" bằng "cười to". RegEx đến cứu trợ!
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string input = "OMG! Bạn có thấy đó không? LOL! Tôi không thể tin nổi. LOL";
string pattern = @"\bLOL\b";
string replacement = "cười to";
string result = Regex.Replace(input, pattern, replacement);
Console.WriteLine(result);
}
}
Đây là những gì đang xảy ra:
- Chúng ta sử dụng
\b
để khớp các giới hạn từ. Điều này đảm bảo rằng chúng ta chỉ thay thế "LOL" khi nó là một từ riêng lẻ, không phải một phần của từ khác. -
Regex.Replace
thực hiện phép màu tìm kiếm và thay thế tất cả các khớp.
Kết quả đầu ra: "OMG! Bạn có thấy đó không? cười to! Tôi không thể tin nổi. cười to"
Ví dụ 3: Trích xuất thông tin
Cuối cùng, hãy trích xuất tất cả các hashtag từ một tweet. Đây là điều bạn có thể làm nếu bạn đang xây dựng một tính năng chủ đề phổ biến cho một ứng dụng mạng xã hội.
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string tweet = "Vừa hoàn thành khóa học #CSharp! #LậpTrình #HọcLậpTrình";
string pattern = @"#\w+";
MatchCollection matches = Regex.Matches(tweet, pattern);
Console.WriteLine("Các hashtag tìm thấy:");
foreach (Match match in matches)
{
Console.WriteLine(match.Value);
}
}
}
Hãy phân tích điều này:
- Mẫu của chúng ta
#\w+
tìm kiếm một # tiếp theo là một hoặc nhiều ký tự từ (word characters). -
Regex.Matches
tìm thấy tất cả các lần xuất hiện của mẫu trong chuỗi của chúng ta. - Chúng ta sau đó duyệt qua các khớp và in mỗi hashtag.
Kết quả đầu ra:
Các hashtag tìm thấy:
#CSharp
#LậpTrình
#HọcLậpTrình
Kết thúc
Chúc mừng! ? Bạn đã vừa bước những bước đầu tiên vào thế giới Biểu thức chính quy trong C#. Chúng ta đã bao gồm các基础知识, từ khớp mẫu đơn giản đến việc thay thế văn bản và trích xuất thông tin. Nhớ rằng RegEx là một công cụ mạnh mẽ, nhưng như bất kỳ siêu năng lực nào, nó đòi hỏi sự luyện tập để thành thạo.
Đừng nản lòng nếu nó có vẻ khó khăn ban đầu. Tôi nhớ khi tôi lần đầu tiên dạy RegEx, tôi có một học sinh rất bối rối, anh ấy nói rằng nó trông như thể một con mèo đã đi qua bàn phím của anh ấy! Nhưng với sự luyện tập, anh ấy đã trở thành một phù thủy RegEx. Bạn cũng có thể làm được!
Tiếp tục thử nghiệm, thử các mẫu khác nhau, và sớm bạn sẽ tìm thấy những cây kim trong đống cỏ như một chuyên gia. Chúc bạn vui vẻ lập trình! ??
Credits: Image by storyset