Ngôn Ngữ Lập Trình C#
// tạo chuỗi biểu thức quy tắc
Regex theRegex = new Regex(“ |, ”);
StringBuilder sBuilder = new StringBuilder();
int id = 1;
// sử dụng vòng lặp để lấy các chuỗi con
foreach ( string subString in theRegex.Split(s1))
{
// nối chuỗi vừa tìm được trong biểu thức quy tắc
// vào chuỗi StringBuilder theo định dạng sẵn.
sBuilder.AppendFormat(“{0}: {1} \n”, id++, subString);
}
Console.WriteLine(“{0}”, sBuilder);
}// end Main
}// end class
}// end namespace
Kết quả:
1: Mot
2: hai
3: ba
4: Trung
5: Tam
6: Dao
7: Tao
8: CNTT
Ví dụ minh họa bắt đầu bằng việc tạo một chuỗi s1, nội dung của chuỗi này tương tự như
chuỗi trong minh họa 10.4.
string s1 = “Mot, hai, ba, Trung Tam Dao Tao CNTT”;
Tếp theo một biểu thức quy tắc được tạo ra, biểu thức này được dùng để tìm kiếm một chuỗi:
static void Main()
{
// tạo chuỗi tìm kiếm
string s1 = “Mot, hai, ba Trung Tam Dao Tao CNTT”;
StringBuilder sBuilder = new StringBuilder();
int id = 1;
// ở đây không tạo thể hiện của Regex do sử dụng phương
// thức tĩnh của lớp Regex.
foreach( string subStr in Regex.Split( s1, “ |, ”))
{
sBuilder.AppendFormat(“{0}: {1}\n”, id++, subStr);
}
Console.WriteLine(“{0}”, sBuilder);
}
}
}
Kết quả của ví dụ minh họa 10.6 hoàn toàn tương tự như minh họa 10.5. Tuy nhiên trong
chương trình thì chúng ta không tạo thể hiện của đối tượng Regex. Thay vào đó chúng ta sử
dụng trực tiếp phương thức tĩnh của Regex là Split(). Phương thức này lấy vào hai tham số,
Xử Lý Chuỗi
294
.
.
Ngôn Ngữ Lập Trình C#
tham số đầu tiên là chuỗi đích cần thực hiện so khớp và tham số thứ hai là chuỗi biểu thức
quy tắc dùng để so khớp.
Sử dụng Regex để tìm kiếm tập hợp
Hai lớp được thêm vào trong namespace .NET cho phép chúng ta thực hiện việc tìm kiếm
một chuỗi một cách lập đi lặp lại cho đến hết chuỗi, và kết quả trả về là một tập hợp. Tập hợp
}// end class
}// end namespace
Xử Lý Chuỗi
295
.
.
Ngôn Ngữ Lập Trình C#
Kết quả:
Chieu dai: 5
Chuoi: Ngon
Chieu dai: 4
Chuoi: ngu
Chieu dai: 4
Chuoi: lap
Chieu dai: 6
Chuoi: trinh
Chieu dai: 2
Chuoi: C
Ví dụ 10.7 bắt đầu bằng việc tạo một chuỗi tìm kiếm đơn giản:
string string1 = “Ngon ngu lap trinh C Sharp”;
và một biểu thức quy tắc để thực hiện việc tìm kiếm trên chuỗi string1:
Regex theReg = new Regex(@”(\S+)\s”);
Chuỗi \S tìm ký tự không phải ký tự trắng và dấu cộng chỉ ra rằng có thể có một hay nhiều ký
tự. Chuỗi \s (chữ thường) chỉ ra là khoảng trắng. Kết hợp lại là tìm một chuỗi không có
khoảng trắng bên trong nhưng theo sau cùng là một khoảng trắng. Chúng ta lưu ý khai báo
chuỗi biểu thức quy tắc dạng chuỗi nguyên văn để dễ dàng dùng các ký tự escape như (\).
Kết quả được trình bày là năm từ đầu tiên được tìm thấy. Từ cuối cùng không được tìm thấy
bởi vì nó không được theo sau bởi khoảng trắng. Nếu chúng ta chèn một khoảng trắng sau
{
string string1 = “10:20:30 127.0.0.0 Dolphin.net”;
// nhóm thời gian bằng một hay nhiều con số hay dấu :
// và theo sau bởi khoảng trắng.
Regex theReg = new Regex(@”(?<time>(\d|\:)+)\s” +
// địa chỉ IP là một hay nhiều con số hay dấu chấm theo
// sau bởi khoảng trắng
@”(?<ip>(\d|\.)+)\s” +
// địa chỉ web là một hay nhiều ký tự
@”(?<site>\S+)”);
// lấy một tập hợp các chuỗi được so khớp
MatchCollection theMatches = theReg.Matches( string1 );
// sử dụng vòng lặp để lấy các chuỗi trong tập hợp
foreach (Match theMatch in theMatches)
{
if (theMatch.Length != 0)
{
Console.WriteLine(“\ntheMatch: {0}”, theMatch.ToString());
// hiển thị thời gian
Console.WriteLine(“Time: {0}”, theMatch.Groups[“time”]);
// hiển thị địa chỉ IP
Console.WriteLine(“IP: {0}”, theMatch.Groups[“ip”]);
// hiển thị địa chỉ web site
Console.WriteLine(“Site: {0}”, theMatch.Groups[“site”]);
}// end if
}// end foreach
Xử Lý Chuỗi
297
.
.