Danh mục

XỬ LÝ CHUỖI phần 3

Số trang: 12      Loại file: pdf      Dung lượng: 214.26 KB      Lượt xem: 1      Lượt tải: 0    
Hoai.2512

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

Thông tin tài liệu:

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ự.
Nội dung trích xuất từ tài liệu:
XỬ LÝ CHUỖI phần 3Ví dụ 10.7 bắt đầu bằng việc tạo một chuỗi tìm kiếm đơngiả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 haynhiề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ỗikhông có khoảng trắng bên trong nhưng theo sau cùng là một khoảng trắng. Chúngta 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ácký 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ìmthấybở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ắngsau 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âuhơ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 nhautheo một quy định nào đó. Ví dụ như chúng ta cần tìm kiếm địa chỉ IP và nhómchú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: @”(?(\d|\ .)+)\s”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ácnhó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(@”(?(\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 @”(?(\d|\.)+)\s” + // địa chỉ web là một hay nhiều ký tự @”(?\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 }// end Main }// end class}// end namespace-----------------------------------------------------------------------------Ví dụ minh họa 10.8 bắt đầu bằng việc tạo một chuỗi đơn giản để tìm kiếm như sau: string string1 = “10:20:30 127.0.0.0 Dolphin.net”;Chuỗi này có thể được tìm thấy trong nội dung của các tập tin log ghi nhận các thôngtin ở web server hay từ các kết quả tìm kiếm được trong cơ sở dữ liệu. Trong ví dụ đơngiản này cóba cột, một cột đầu tiên ghi nhận thời gian, cột thứ hai ghi nhận địa chỉ IP, và cột thứba ghi nhận địa chỉ web. Mỗi cột được ngăn cách bởi khoảng trắng. Dĩ nhiên là trongcác ứng dụng thực tế ta phải giải quyết những vấn đề phức tạp hơn nữa, chúng ta cóthể cần phải thực hiện việc tìm kiếm phức tạp hơn và sử dụng nhiều ký tự ngăn cáchhơn nữa.Trong ví dụ này, chúng ta mong muốn là tạo ra một đối tượng Regex để tìm kiếm chuỗicon yêu cầu và phân chúng vào trong ba nhóm: time, địa chỉ IP, và địa chỉ web. Biểuthức quy tắc ở đây cũng khá đơn giản, do đó cũng dễ hiểu.Ở đây chúng ta quan tâm đến những ký tự tạo nhóm như: Vòng lặp foreach được dùng để lấy ra các chuỗi con được tìm thấy trong tập hợp.Nếu chiều dài Length của Match là lớn hơn 0, tức là tìm thấy thì chúng ta sẽ xuất rachuỗi được tìm thấy: Console.WriteLine(“\ntheMatch: {0}”, theMatch.ToString());Và kết quả của ví dụ là: theMatch: 10:20:30 127.0.0.0 Dolphin.netSau đó chương trình lấy nhóm time từ tập hợp nhóm của Match và xuất ra màn hìnhbằng các lệnh như sau: Console.WriteLine(“time: {0}”, theMatch.Groups[“time”]);Kết quả là : Time: 10:20:30Tương tự như vậy với nhóm ip và site: Console.WriteLine(“IP: {0}”, theMatch.Groups[“ip”]); // hiển thị địa chỉ web site Console.WriteLine(“site: {0}”, theMatch.Groups[“site”]);Ta nhận được kết quả: IP: 127.0.0.0 Site: Dolphin.netTrong ví dụ 10.8 trên thì tập hợp Match chỉ so khớp duy nhất một lần. Tuy nhiên, nó cóthể so khớp nhiều hơn nữa trong một chuỗi. Để làm được điều này, chúng ta có thể bổsung chuỗi tìm kiếm được lấy từ trong một log file như sau: String string1 = “10:20:30 127.0.0.0 Dolphin.net ” + “10:20:31 127.0.0.0 Mun.net ” + “10:20:32 127.0.0.0 Msn.net ”;Chuỗi này sẽ tạo ra ba chuỗi con so khớp được tìm thấy trong MatchCollection. Và kếtquả tacó thể thấy được là: theMatch: 10:20:30 127.0.0.0 Dolphin.net Time: 10:20:30 IP: 127.0.0.0 site: Dolphin.net theMatch: 10:20:31 127.0.0.0 Mun.net Time: 10:20:31 IP: 127.0.0.0 Site: Mun.net theMatch: 10:20:32 127.0.0.0 Msn.net time: 10:20:32 IP: 127.0.0.0 Site: Msn.netTrong ví dụ này phần bổ sung, thì theMatches chứa ba đối tượng Match. Mỗi lần lặpt ...

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