Danh mục

Ngôn Ngữ Lập Trình C#

Số trang: 91      Loại file: pdf      Dung lượng: 913.79 KB      Lượt xem: 16      Lượt tải: 0    
Jamona

Xem trước 9 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Thuộc tính quan trọng của đối tượng Capture là thuộc tính Length, đây chính là chiều dài của chuỗi con được nắm giữ. Khi chúng ta hỏi Match chiều dài của nó, thì chúng ta sẽ nhận được Capture.Length do Match được dẫn xuất từ Group và đến lượt Group lại được dẫn xuất từ Capture. Mô hình kế thừa trong biểu thức quy tắc của .NET cho phép Match thừa hưởng những giao diện phương thức và thuộc tính của những lớp cha của nó....
Nội dung trích xuất từ tài liệu:
Ngôn Ngữ Lập Trình C#Ngôn Ngữ Lập Trình C# Ngôn Ngữ Lập Trình C#Thuộc tính quan trọng của đối tượng Capture là thuộc tính Length, đây chính là chiều dài củachuỗi con được nắm giữ. Khi chúng ta hỏi Match chiều dài của nó, thì chúng ta sẽ nhận đượcCapture.Length do Match được dẫn xuất từ Group và đến lượt Group lại được dẫn xuất từCapture.Mô hình kế thừa trong biểu thức quy tắc của .NET cho phép Match thừa hưởng những giaodiện phương thức và thuộc tính của những lớp cha của nó. Theo ý nghĩa này, thì một Group làmột Capture (Group is-a Capture), là một đối tượng Capture đóng gói các ý tưởng về cácnhóm biểu thức. Đến luợt Match, nó cũng là một Group (Match is-a Group), nó đóng gói tấtcả các nhóm biểu thức con được so khớp trong biểu thức quy tắc (Xem chi tiết hơn trongchương 5: Kế thừa và đa hình).Thông thường, chúng ta sẽ tìm thấy chỉ một Capture trong tập hợp CaptureCollection; nhưngđiều này không phải vậy. Chúng ta thử tìm hiểu vấn đề như sau, ở đây chúng ta sẽ gặp trườnghợp là phân tích một chuỗi trong đó có nhóm tên của công ty được xuất hiện hai lần. Đểnhóm chúng lại trong chuỗi tìm thấy chúng ta tạo nhóm ? xuất hiện ở hai nơitrong mẫu biểu thức quy tắc như sau: Regex theReg = new Regex(@”(?(d|:)+)s” + @”(?S+)s” + @”(?(d|.)+)s” + @”(?S+)s”);Biểu thức quy tắc này nhóm bất cứ chuỗi nào hợp với mẫu so khớp time, và cũng như bất cứchuỗi nào theo nhóm ip. Giả sử chúng ta dùng chuỗi sau để làm chuỗi tìm kiếm: string string1 = “10:20:30 IBM 127.0.0.0 HP”;Chuỗi này chứa tên của hai công ty ở hai vị trí khác nhau, và kết quả thực hiện chương trìnhlà như sau: theMatch: 10:20:30 IBM 127.0.0.0 HP Time: 10:20:30 IP: 127.0.0.0 Company: HPĐiều gì xảy ra? Tại sao nhóm Company chỉ thể hiện giá trị HP. Còn chuỗi đầu tiên ở đâu haylà không được tìm thấy? Câu trả lời chính xác là mục thứ hai đã viết chồng mục đầu. Tuynhiên, Group vẫn lưu giữ cả hai giá trị. Và ta dùng tập hợp Capture để lấy các giá trị này. Ví dụ minh họa 10.9: Tìm hiểu tập hợp CaptureCollection.-----------------------------------------------------------------------------namespace Programming_CSharp{ using System; using System.Text.RegularExpressions; class Test 300 Xử Lý Chuỗi Ngôn Ngữ Lập Trình C# { public static void Main() { // tạo một chuỗi để phân tích // lưu ý là tên công ty được xuất // hiện cả hai nơi string string1 = “10:20:30 IBM 127.0.0.0 HP”; // biểu thức quy tắc với việc nhóm hai lần tên công ty Regex theReg = new Regex(@”(?(d|:)+)s” + @”(?S+)s” + @”(?(d| .)+)s” + @”(?S+)s”); // đưa vào tập hợp các chuỗi được tìm thấy MatchCollection theMatches = theReg.Matches( string1 ); // dùng vòng lặp để lấy kết quả foreach ( Match theMatch in theMatches) { if ( theMatch.Length !=0 ) { Console.WriteLine(“theMatch: {0}”, theMatch.ToString()); Console.WriteLine(“Tme: {0}”, theMatch.Groups[“time”]); Console.WriteLine(“IP{0}”, theMatch.Groups[“ip”]); Console.WriteLine(“Company: {0}”, theMatch.Groups[“company”]); // lặp qua tập hợp Capture để lấy nhóm company foreach ( Capture cap in theMatch.Groups[“Company”].Captures) { Console.WriteLine(“Capture: {0}”, cap.ToString()); }// end foreach }// end if }// end foreach }// end Main }// end class}// end namespace----------------------------------------------------------------------------- Kết quả:theMatch: 10:20:30 IBM 127.0.0.0 HPTime: 10:20:30IP: 127.0.0.0 301 Xử Lý Chuỗi Ngôn Ngữ Lập Trình C#Company: HPCapture: IBMCapture: HP-----------------------------------------------------------------------------Trong đoạn vòng lặp cuối cùng: foreach ( Capture cap in theMatch.Groups[“Company”].Captures) { Console.WriteLine(“Capture: {0}”, cap.ToString()); }// end foreachĐoạn lặp này lặp qua tập hợp Capture của nhóm Company. Chúng ta thử tìm hiểu cách phântích như sau. Trình biên dịch bắt đầu tìm một tập hợp cái mà chúng sẽ thực hiện việc lặp.theMatch là một đối tượng có một tập hợp tên là Groups. Tập hợp Groups có một chỉ mụcđưa ra một chuỗi và trả về một đối tượng Group. Do vậy, dòng lệnh sau trả về một đối tượngđơn Group: theMa ...

Tài liệu được xem nhiều: