1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Giáo trình phân tích ứng dụng quy trình tạo chuỗi dùng phương thức Peek qua lớp regex p5 pdf

5 281 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 5
Dung lượng 488,47 KB

Nội dung

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: Regex theRegex = new Regex(“ |, ”); Ở đây một bộ khởi tạo nạp chồng của Regex lấy một chuỗi biểu thức quy tắc như là tham số của nó. Điều này gây ra sự khó hiểu. Trong ngữ cảnh của một chương trình C#, cái nào là biểu thức quy tắc: chuỗi được đưa vào bộ khởi dựng hay là đối tượng Regex? Thật sự thì chuỗi ký tự được truyền vào chính là biểu thức quy tắc theo ý nghĩa truyền thống của thuật ngữ này. Tuy nhiên, theo quan điểm hướng đối tượng của ngôn ngữ C#, đối mục hay tham số của bộ khởi tạo chỉ đơn thuần là chuỗi ký tự, và chính Regex mới là đối tượng biểu thức quy tắc! Xử Lý Chuỗi 293 . . Ngôn Ngữ Lập Trình C# Phần còn lại của chương trình thực hiện giống như ví dụ minh họa 10.4 trước. Ngoại trừ việc gọi phương thức Split() của đối tượng Regex chứ không phải của chuỗi s1. Regex.Split() hành động cũng tương tự như cách String.Split(). Kết quả trả về là mảng các chuỗi, đây chính là các chuỗi con so khớp tìm được theo mẫu đưa ra trong theRegex. Phương thức Regex.Split() là phương thức được nạp chồng. Phiên bản đơn giản được gọi trong thể hiện của Regex được dùng như trong ví dụ 10.5. Ngoài ra còn có một phiên bản tĩnh của phương thức này. Phiên bản này lấy một chuỗi để thực hiện việc tìm kiếm và một mẫu để so khớp. Tiếp sau là minh họa 10.6 sử dụng phương thức tĩnh  Ví dụ minh họa 10.6: Sử dụng phương thức tĩnh Regex.Split(). namespace Programming_CSharp { using System; using System.Text; using System.Text.RegularExpressions; public class Tester { 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 được trả về có kiểu là MatchCollection, bao gồm không có hay nhiều đối tượng Match. Hai thuộc tính quan trọng của những đối tượng Match là chiều dài và giá trị của nó, chúng có thể được đọc như trong ví dụ minh họa 10.7 dưới đây.  Ví dụ minh họa 10.7: Sử dụng MatchCollection và Match. namespace Programming_CSharp { using System; using System.Text.RegularExpressions; class Tester { static void Main() { string string1 = “Ngon ngu lap trinh C Sharp”; // tìm bất cứ chuỗi con nào không có khoảng trắng // bên trong và kết thúc là khoảng trắng Regex theReg = new Regex(@”(\S+)\s”); // tạo tập hợp và nhận kết quả so khớp MatchCollection theMatches = theReg.Matches(string1); // lặp để lấy kết quả từ tập hợp foreach ( Match theMatch in theMatches) { Console.WriteLine(“Chieu dai: {0}”, theMatch.Length); // nếu tồn tại chuỗi thì xuất ra if ( theMatch.Length != 0) { Console.WriteLine(“Chuoi: {0}”, theMatch.ToString()); }// end if }// end foreach }// end Main }// 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 chữ “Sharp” và trước dấu ngoặc đóng, thì chương trình sẽ tìm được thêm chữ “Sharp”. Thuộc tính Length là chiều dài của chuỗi con tìm kiếm được. Chúng ta sẽ tìm hiểu sâu hơn về thuộc tính này trong phần sử dụng lớp CaptureCollection ở cuối chương. Sử dụng Regex để gom nhóm Đôi khi lập trình chúng ta cần gom nhóm một số các biểu thức tương tự với nhau theo một quy định nào đó. Ví dụ như chúng ta cần tìm kiếm địa chỉ IP và nhóm chúng lại vào trong nhóm IPAddresses được tìm thấy bất cứ đâu trong một chuỗi. Lớp Group cho phép chúng ta tạo những nhóm và tìm kiếm dựa trên biểu thức quy tắc, và thể hiện kết quả từ một nhóm biểu thức đơn. Một biểu thức nhóm định rõ một nhóm và cung cấp một biểu thức quy tắc, bất cứ chuỗi con nào được so khớp bởi biểu thức quy tắc thì sẽ được thêm vào trong nhóm. Ví dụ, để tạo một nhóm chúng ta có thể viết như sau: @”(?<ip>(\d|\ .)+)\s” Xử Lý Chuỗi 296 . . Ngôn Ngữ Lập Trình C# Lớp Match dẫn xuất từ nhóm Group, và có một tập hợp gọi là Groups chứa tất cả các nhóm mà Match tìm thấy. Việc tạo và sử dụng tập hợp Groups và lớp Group được minh họa trong ví dụ 10.8 như sau:  Ví dụ minh họa 10.8: Sử dụng lớp Group. namespace Programming_CSharp { using System; using System.Text.RegularExpressions; class Tester { public static void Main() { 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 . . . 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. được tạo ra, biểu thức này được dùng để tìm kiếm một chuỗi: Regex theRegex = new Regex( “ |, ”); Ở đây một bộ khởi tạo nạp chồng của Regex lấy một chuỗi biểu thức quy tắc như là tham số của 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ày đăng: 22/07/2014, 20:22

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN