-
05-02-2008, 08:56 AM #1Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Sử dụng Regular Expression trong C# và .NET
BÀN VỀ REGULAR EXPRESSIONS
Mô tả:
RE là một ngôn ngữ cực mạnh dùng mô tả văn bản cũng như thao tác trên văn bản. Một RE thường được ứng dụng lên một chuỗi, nghĩa là lên một nhóm ký tự.
Chẳng hạn, ta có chuỗi sau:
Mot, Hai, Ba, Bon.
Một RE là một kiểu mẫu văn bản gồm 2 phần: literal (trực kiện) và metacharacters (ký tự siêu). Một literal đơn thuần chỉ là một ký tự (a-z) mà bạn muốn đem so khớp với chuỗi đích. Còn metacharacters là một ký tự đặc biệt hoạt động như là 1 mệnh lệnh đối với bộ phận phân tích ngữ nghĩa (parser) của RE. Bây giờ chúng ta thử tạo một regular expression như sau:
Mã:^(From|To|Subject|Date):
Dấu ^ cho bộ parser của RE biết chuỗi mà ban đang truy tìm phải bắt đầu bởi một hàng mới. Các chữ “From”, “To”,.. là những literal, và những metacharacter “(“, “)”, và “|” được dùng để tạo nhóm literal và cho biết bất cứ những lựa chọn nào cũng phải khớp. Dấu ^ cũng là metacharacter, nó cho biết là khởi đầu 1 hàng. Do đó, bạn đọc hàng sau đây:
Mã:^(From|To|Subject|Date):
Cuối cùng, xin liệt kê vài metacharacter thường dùng trong Regular Expression:
Mã:Ký hiệu Diễn giải. đại diện cho 1 ký tự bất kỳ trừ ký tự xuống dòng .\d ký tự chữ số tương đương [0-9]\D ký tự ko phải chữ số\s ký tự khoảng trắng tương đương [ \f \t\v]\S ký tự không phải khoảng trắng tương đương [ ^\f \t\v]\w ký tự word (gồm chữ cái và chữ số, dấu gạch dưới _ ) tương đương [a-zA-Z_0-9]\W ký tự không phải ký tự word tương đương [^a-zA-Z_0-9]^ bắt đầu 1 chuỗi hay 1 dòng$ kết thúc 1 chuỗi hay 1 dòng\A bắt đầu 1 chuỗi\z kết thúc 1 chuỗi| ký tự ngăn cách so trùng tương đương với phép or (lưu ý cái này nếu muốn kết hợp nhiều điều kiện)[abc] khớp với 1 ký tự nằm trong nhóm là a hay b hay c.[a-z] so trùng với 1 ký tự nằm trong phạm vi a-z, dùng dấu - làm dấu ngăn cách.[^abc] sẽ không so trùng với 1 ký tự nằm trong nhóm, ví dụ không so trùng với a hay b hay c.() Xác định 1 group (biểu thức con) xem như nó là một yếu tố đơn lẻ trong pattern .ví dụ ((a(b))c) sẽ khớp với b, ab, abc.? khớp với đứng trước từ 0 hay 1 lần. Ví dụ A?B sẽ khớp với B hay AB.* khớp với đứng trước từ 0 lần trở lên . A*B khớp với B, AB, AAB+ khớp với đứng trước từ 1 lần trở lên. A+B khớp với AB, AAB.{n} n là con số, Khớp đúng với n ký tự đúng trước nó . Ví dụ A{2}) khớp đúng với 2 chữ A.{n, } khớp đúng với n ký tự trở lên đứng trước nó , A{2,} khớp vói AA, AAA ...{m,n} khớp đùng với từ m->n ký tự đứng trước nó, A{2,4} khớp vói AA,AAA,AAAA.
View more random threads:
- 1054 Notice: Undefined variable: data in C:\xampp\htdocs\awebarts\app\models\Display.php on line 39
- Phân quyền dùng vài thủ thuật nhỏ
- Giúp mình làm Code để Textbox không lưu giá trị nhập trước đó !!!
- Virus viết bằng C# - Một chương trình quậy phá nho nhỏ :D
- Chương trình kích hoạt chức năng Hibernate của Windows trong lập trình C#
- Tại sao mở file .mdf trong sql ra lại chuyển thành file notepad. Giúp mình với ạ.
- Xử lý kéo và thả trong lập trình C#
- Xây dựng chức năng auto Update cho ứng dụng C#?
- Hỏi Nhân vật di chuyển trong XNA bằng cách kết hợp nhiều hình
- Giới thiệu với các bạn bộ thư viện Serialize, Deserialize object ra mảng bytes và từ mảng bytes ra đối tượng một cách đơn giản
-
05-02-2008, 09:03 AM #2Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Các lớp để thao tác với Regular Expression trong .NET:
.NET cung cấp một cách tiếp cận hướng đối tượng về việc so khớp chuỗi và thay thế theo RE. System.Text.RegularExpression là namespace trên thư viện các lớp chuẩn của .NET liên quan đến tất cả các đối tượng gắn liền với RE. Sau đây mình xin giới thiệu sơ lược về các lớp này:
Regex:
Lớp Regex tượng trưng cho 1 regular expression bất di bất dịch (read-only). Nó cũng chứa một phương thức tĩnh (static) cho phép chúng ta sử dụng những lớp rex khác mà khỏi khởi tạo 1 đối tượng khác. Ví dụ:
Mã:string pattern = @"\s2000"; Regex myRegex = new Regex(pattern);
-Thuộc tính:
+Options: trả về những mục chọn được trao qua cho constructor Regex.
+RightToLeft: nhận 1 trị cho biết liệu xem regular expression dò tìm từ phải qua trái hay không
-Phương thức:
+GetGroupNames: trả về mảng gồm toàn tên nhóm thu lượm đối với RE.
+GetGroupNumbers: trả về mảng gồm toàn số nhóm thu lượm tương ứng với tên nhóm trên 1 mảng.
+GroupNameFromNumber: đi lấy tên nhóm tương ứng với số nhóm được khai báo.
+IsMatch: trả về trị bool cho biết liệu xem RE có tìm thấy một so khớp hay không trên pattern.
+Match: dò tìm trên pattern xem có xuất hiện một RE hay không rồi trả về kết quả chính xác như là một đối tượng Match duy nhất.
+Matches: dò tìm trên pattern xem tất cả các xuất hiện của một RE có hay không rồi trả về tất cả những so khớp thành công xem như Match được gọi nhiều lần.
+Replace: cho thay thế những xuất hiện của một pattern được định nghĩa bởi một RE bởi một chuỗi ký tự thay thế được chỉ định.
+Split: chẻ một pattern thành một mảng gồm những chuỗi con ở những vị trí được chỉ định bởi một so khớp trên RE
+Unescape: cho unescape bất cứ những ký tự nào được escape trên pattern.
Sau đây là ví dụ sử dụng lớp Regex để tách chuỗi qua việc dùng phương thức Split của nó:
Mã:string chuoi = "Mot, Hai, Ba, Bon.";//tạo pattern//luật: xem chuỗi nào có chứa khoảng trắng hay dấu phẩystring pattern = " |, ";Regex myRegex = new Regex(pattern);string[] sKetQua = myRegex.Split(chuoi);foreach (string subString in sKetQua){ Console.WriteLine(subString);}
Mã:Mot Hai Ba Bon
Phương thức Regex.Split() hoạt động cũng giống như String.Split(), trả về 1 mảng chuỗi như là kết quả việc so khớp pattern của RE trong lòng myRegex.
Lớp Match:
Lớp này tượng trưng cho những kết quả duy nhất của một tác vụ so khớp (match) RE. Sau đây mình có 1 ví dụ nhỏ sử dụng phương thức Match của lớp Regex để trả về 1 đối tượng kiểu Match để có thể tìm ra so khớp đầu tiên trên chuỗi nhập.
Sử dụng thuộc tính Match.Access của lớp Match báo cho biết liệu xem đã tìm ra 1 so khớp hay chưa.
Mã:string chuoi = "123abcd456bdabc";string pattern = "abc";Regex myRegex = new Regex(pattern);Match m = myRegex.Match(chuoi);if (m.Success){ Console.WriteLine("Tim thay chuoi con {0} o vi tri thu {1} trong chuoi", m.Value, m.Index);}else Console.WriteLine("Khong tim thay chi ca");
Mã:Tim thay chuoi con abc o vi tri thu 3 trong chuoi
-
05-02-2008, 09:05 AM #3Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Lớp MatchCollection
Lớp này tượng trưng cho 1 loạt những so khớp thành công đè chồng lên nhau tạo thành một tập hợp bất di bất dịch và lớp này không có phương thức khởi tạo. Nhũng đối tượng MatchCollection sẽ do thuộc tính Regex.Matches của lớp Regex trả về.
Hiểu nôm na MatchCollection là mảng các đối tượng Match là được.
Ví dụ:
Mã:static void Main(string[] args){ //tập hợp chứa những so khớp MatchCollection mc; //1 chuỗi thử nghiệm string chuoi = "I like money, like woman and like C#"; //tạo pattern string pattern = "like"; //khởi tạo 1 đối tượng của Regex //truyền chuỗi pattern vào constructor Regex myRegex = new Regex(pattern); //dùng phương thức Matches của myRegex //để tìm ra matches và chỉ mục của từng match mc = myRegex.Matches(chuoi); foreach (Match m in mc) { Console.WriteLine("Chuoi con '{0}' xuat hien o chi muc {1}", m.Value, m.Index); }}
Mã:Chuoi con 'like' xuat hien o chi muc 2 Chuoi con 'like' xuat hien o chi muc 14 Chuoi con 'like' xuat hien o chi muc 29
Hai thuộc tính của đối tượng Match là chiều dài và vị trí của nó, mà ta có thể đọc như ví dụ sau:
Mã:static void Main(string[] args){ //tập hợp chứa những so khớp MatchCollection mc; //1 chuỗi thử nghiệm string chuoi = "This is a example string."; //tạo pattern //luật:cho tìm ra bất cứ những ký tự không phải ký tự khoảng trắng //rồi theo sau nó là kí tự khoảng trắng string pattern = @"\S+\s"; //khởi tạo 1 đối tượng của Regex //truyền chuỗi pattern vào constructor Regex myRegex = new Regex(pattern); //dùng phương thức Matches của myRegex //để tìm ra matches và chỉ mục của từng match mc = myRegex.Matches(chuoi); for (int i = 0; i < mc.Count; i++) { Console.WriteLine("The match[{0}]: '{1}' co chieu dai la {2}", i,mc[i].Value, mc[i].Length); }}
Kết quả của ví dụ trên là:
Mã:The match[0]: 'This ' co chieu dai la 5 The match[1]: 'is ' co chieu dai la 3 The match[2]: 'a ' co chieu dai la 2 The match[3]: 'example ' co chieu dai la 8
Tác giả: neverland
-
05-02-2008, 09:09 AM #4Junior Member
- Ngày tham gia
- Sep 2015
- Đang ở
- hà nội
- Bài viết
- 0
Lớp Group
Đôi khi người ta cho là rất tiện khi cho gộp lại những biểu thức con so khớp với nhau như vậy bạn có thể phân tích ngữ nghĩa những đoạn của chuỗi khớp. Ví dụ, có thể bạn muốn so khớp dựa trên địa chỉ IP và cho gộp lại tất cả các IP tìm thấy được bất cứ nơi nào trên đoạn chuỗi.
Lớp Group cho phép bạn tạo những nhóm so khớp dựa trên cú pháp RE, và tượng trưng cho kết quả từ 1 biểu thức gộp nhóm duy nhất.
Một biểu thức gộp nhóm đặt tên cho một nhóm v2 cung cấp 1 RE; bất cứ chuỗi con nào khớp với RE sẽ được đưa vào nhóm. Ví dụ, muốn tạo 1 nhóm IP, bạn có thể viết một RE cho biết một hoặc nhiều digit hay dot theo sau bởi space như sau:
Mã:@”(?<ip>(\d|\.)+)\s”
Lớp Group tượng trưng cho những kết quả thu hoạch được từ 1 thu lượm nhóm duy nhất. Ví Group có thể thu lượm 0, 1 hoặc nhiều chuỗi chữ trong một lần so khớp duy nhất, nó chứa một tập hợp gồm những đối tượng của Capture. Vì Group kế thừa từ Capture, substring bị thu lượm có thể được truy xuất trực tiếp.
Các thể hiện của Group sẽ được trả về bởi thuộc tính Match.Groups(số group) hoặc Match.Groups(“tên group”) nếu cấu trúc gộp nhóm “(?<groupname>)” được dùng đến.
Ví dụ sau đây sử dụng kiến trúc gộp nhóm lồng nhau để thu lượm những chuỗi con gộp thành nhóm:
Mã:static void Main(string[] args){ string pattern = "(a(b))c"; string chuoi = "abdabc"; //định nghĩa những substring abc,ab,b Regex myRegex = new Regex(pattern); Match m = myRegex.Match(chuoi); for (int i = 0; m.Groups[i].Value != ""; i++) { Console.WriteLine("{0} co chieu dai {1}", m.Groups[i].Value, m.Groups[i].Length); }}
Mã:abc co chieu dai 3 ab co chieu dai 2 b co chieu dai 1
Mã:static void Main(string[] args){ string pattern = @"^(?<name>\w+):(?<value>\w+)"; Regex myRegex = new Regex(pattern); Match m = myRegex.Match("Section:119900"); for (int i = 0; m.Groups[i].Value != ""; i++) { Console.WriteLine("{0} co chieu dai {1}", m.Groups[i].Value, m.Groups[i].Length); }}
Mã:Section:119900 co chieu dai 14 Section co chieu dai 7 119900 co chieu dai 6
Mã:m.Groups[“name”].Value = “Section1” m.Groups[“value”].Value = “119900”
Mã:static void Main(string[] args){ //một chuỗi ví dụ string chuoi = "04:03:27 0 congdongcviet.com"; //group time = một hoặc nhiều digit hoặc dấu hai chấm //theo sau bởi khoảng trắng string timePattern = @"(?<time>(\d|\:)+)\s"; string ipPattren = @"(?<ip>(\d|\.)+)\s"; string sitePattern = @"(?<site>\S+)"; string pattern = timePattern + ipPattren + sitePattern; Regex myRegex = new Regex(pattern); //đi lấy tập hợp những so khớp MatchCollection matches = myRegex.Matches(chuoi); foreach (Match match in matches) { if (match.Length != 0) { Console.WriteLine(" Match: {0}", match.ToString()); Console.WriteLine(" Time: {0}", match.Groups["time"]); Console.WriteLine(" IP: {0}", match.Groups["ip"]); Console.WriteLine(" Site: {0}", match.Groups["site"]); } }}
Mã:Match: 04:03:27 0 congdongcviet.com Time: 04:03:27 IP: 0 Site: congdongcviet.com
Mã:string chuoi = "04:03:27 0 congdongcviet.com";
Bạn muốn tạo một đối tượng Regex duy nhất để dò tìm những chuỗi kiểu này, và chặt chúng thành 3 nhóm: time,ip và site :
Mã:string timePattern = @"(?<time>(\d|\:)+)\s";string ipPattren = @"(?<ip>(\d|\.)+)\s";string sitePattern = @"(?<site>\S+)";string pattern = timePattern + ipPattren + sitePattern;Regex myRegex = new Regex(pattern);
+Các dấu ngoặc () lo tạo một nhóm. Những gì nằm giữa dấu ngoặc mở (ngay trước dấu ?) và dấu ngoặc đóng (sau dấu + trong trường hợp này) là 1 nhóm đơn độc chưa mang tên.
Mã:@"(?<time>(\d|\:)+)\s"
+Chuỗi ?<ip> đặt tên cho nhóm ip, và ?<site> đặt tên cho nhóm site. Như các ví dụ trước, ví dụ trên cũng đòi hỏi một tập hợp của tát cả các đoạn khớp:
Mã:MatchCollection matches = myRegex.Matches(chuoi);
Mã:foreach (Match match in matches)
Mã:Console.WriteLine(" Match: {0}", match.ToString());
Mã:Console.WriteLine(" Time: {0}", match.Groups["time"]);
Mã:Time: 04:03:27
Mã:IP: 0 Site: congdongcviet.com
-
05-02-2008, 09:11 AM #5Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Lớp GroupCollection:
Là lớp tượng trưng cho 1 tập hợp gồm toàn những nhóm được thu lượm và trả về một lô những nhóm được thu lượm trong một lần so khớp duy nhất. Collection này thuộc loại read-only và không có phương thức khởi tạo. Các thể hiện của lớp GroupCollection được trả về trong tập hợp mà thuộc tính Match.Groups trả về.
Ví dụ: dò tìm và in ra số những nhóm được thu lượm bởi một RE. Làm thế nào để trích từng thu lượm riêng rẽ trên mỗi thành viên của môt group collection.
Mã:using System;using System.Collections.Generic;using System.Text;using System.Text.RegularExpressions; namespace ConsoleApplication1{ class Program { static void Main(string[] args) { Regex myRegex = new Regex("(a(b))c"); Match m = myRegex.Match("abdabc"); Console.WriteLine("So nhom duoc tim thay la: {0}",m.Groups.Count); } }}
Mã:So nhom duoc tim thay la 3
-
05-02-2008, 09:13 AM #6Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Lớp Cature:
Lớp này chứa những kết quả từ một thu lượm duy nhất dựa trên một expression-con (sub-expression)
Lớp CatureCollection:
Mỗi lần một đối tượng Regex khớp với một subexpression, một thể hiện Capture sẽ được tạo ra, và được thêm vào tập hợp CaptureCollection. Mỗi đối tượng Capture tượng trưng cho một thu lượm (capture) đơn lẻ. Mỗi nhóm sẽ có riêng cho mình một capture collection những mục khớp với subexpression được gắn liền với nhóm.
Lớp CaptureCollection tượng trưng cho một loạt những chuỗi con được thu lượm và trả về một lô những thu lượm được thực hiện chỉ qua một nhóm thu lượm duy nhất. Thuộc tính Captures, một đối tượng của lớp CaptureCollection, được cung cấp như là một thành viên của các lớp Match và Group giúp truy xuất dễ dàng lô các chuỗi con được thu lượm.
Ví dụ: nếu bạn sử dụng regular expression ((a(b)c)+ (dấu + cho biết là một hoặc nhiều chuỗi so khớp) để thu lượm những so khớp từ chuỗi chữ “abcabcabc”. CaptureCollection đối với mỗi matching Group của những substring sẽ chứa 3 thành viên.
Ví dụ sau đây mình dùng đến regular expression (Abc)+ để tìm ra một hoặc nhiều so khớp trên chuỗi “XYZAbcAbcAbcXYZAbcAb”. Ví dụ minh họa việc sử dụng thuộc tính Captures để trả về nhiều nhóm các chuỗi con bị thu lượm:
Mã:using System;using System.Collections.Generic;using System.Text;using System.Text.RegularExpressions; namespace ConsoleApplication1{ class Program { static void Main(string[] args) { string chuoi = "XYZAbcAbcAbcXYZAbcAb"; string pattern = "(Abc)+"; Regex myRegex = new Regex(pattern); Match m = myRegex.Match(chuoi); GroupCollection gc = m.Groups; CaptureCollection cc; Console.WriteLine("So nhom thu luom duoc = {0}",gc.Count.ToString()); Console.WriteLine(); for(int i=0;i<gc.Count;i++) { cc = gc[i].Captures; Console.WriteLine("So capture = " + cc.Count.ToString()); for(int j=0;j< cc.Count;j++) { Console.WriteLine(cc[j] + " bat dau tu ky tu " + cc[j].Index); } Console.WriteLine(); } } }}
Mã:So nhom thu luom duoc = 2 So capture = 1AbcAbcAbc bat dau tu ky tu 3 So capture = 3Abc bat dau tu ky tu 3Abc bat dau tu ky tu 6Abc bat dau tu ky tu 9
Thuộc tính chủ chốt của đối tượng Capture là Length, cho biết chiều dài của chuỗi con bị thu lượm. Khi bạn yêu cầu Match cho biết chiều dài, thì chính Capture.Length bạn tìm thấy, vì Match được thừa kế từ Group, và Group lại được dẫn xuất từ Capture.
Điển hình, bạn sẽ chỉ tìm thấy một Capture đơn độc trong mộg CaptureCollection; nhưng điều này không buộc phải như thế. Điều gì sẽ xảy ra nếu bạn phân tích ngữ nghĩa một chuỗi trong ấy tên công ty có thể xuất hiện hoặc ở hai nơi. Muốn gộp các tên này vào chung thành một match đơn lẻ, bạn tạo nhóm ?<company> ở 2 nơi trong pattern của regular expression.
Mã:using System;using System.Collections.Generic;using System.Text;using System.Text.RegularExpressions; namespace ConsoleApplication1{ class Program { static void Main(string[] args) { string chuoi = "05:04:27 NEVERLAND 1 TNHH"; string pattern = @"(?<time>(\d|\:)+)\s" + @"(?<company>\S+)\s" + @"(?<ip>(\d|\.)+)\s" + @"(?<company>\S+)"; Regex myRegex = new Regex(pattern); MatchCollection mc = myRegex.Matches(chuoi); foreach(Match match in mc) { if (match.Length!=0) { Console.WriteLine("Match: {0}",match.ToString()); Console.WriteLine("Time: {0}",match.Groups["time"]); Console.WriteLine("IP: {0}",match.Groups["ip"]); Console.WriteLine("Company: {0}",match.Groups["company"]); Console.WriteLine(); foreach(Capture cap in match.Groups["company"].Captures) { Console.WriteLine("cap: {0}",cap.ToString()); } } } } }}
Mã:foreach(Capture cap in match.Groups["company"].Captures)
Mã:match.Groups["company"].Captures
Kết quả của ví dụ trên:
Mã:Match: 05:04:27 NEVERLAND 1 TNHH Time: 05:04:27 IP: 1 Company: TNHH cap: NEVERLAND cap: TNHH
Tác giả: neverland
-
05-02-2008, 09:22 AM #7Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Mình xin giới thiệu một số tool cần thiết khi học Regular Expression:
Expresso
Ultrapico is excited to announce Expresso 3.0, a major enhancement to the the award winning regular expression development tool. All of the features of Expresso 2.1 are preserved, but with major improvements to the user interface, the Builder and the Analyzer.
We appreciate your help and feedback. Our goal is to make Expresso the best .NET regular expression development tool on the planet.
Here are some of the features:
* Still free of charge!
* Build complex regular expressions by selecting components from a palette
* Test expressions against real or sample input data
* Display all matches in a tree structure, showing captured groups, and all captures within a group
* Build replacement strings and test the match and replace functionality
* Highlight matched text in the input data
* Test automatically for syntax errors
* Generate Visual Basic, C#, or C++ code
* Save and restore data in a project file
* Maintain and expand a library of frequently used regular expressions
* Dramatically enhanced Analyzer
o Analyzes and describes your regular expression in a tree structure
o Updated continuously in a separate thread
o Edit portions of your regular expression by selecting nodes in the Analyzer view
o Immediate feedback on syntax errors
o Highlight portions of your expression for partial matching
* Rich new Builder and editing features
o Easier to use Builder
o Support for .NET 2.0 features like character class subtraction and new Unicode classes
o Extensive editing capabilities via context menus in both text view and Analyzer view
o Builder can be docked or undocked from the Main Expresso window
o Full Undo/Redo capability
* Additional New features
o Line by line validation testing
o Test the Regex.Split() method
o Export match results to Excel, XML, etc.
o Carriage return, line feed, and other invisible characters are visible in the search results
o Drag and drop files and text
o Insert arbitrary Unicode characters in sample text or regular expression
o Code generation for the new C++/CLI syntax in addition to the old MC++
o Code generation for Replacement String and templates for Replace(), Split(), Match() and other regex methods
o Turn Tooltips on or off
o Support for very long data files
o Startup tips to guide new users
* Improvements and additions to the Regex Library
* Improvements to threading to allow reliable interruption of slow expressions.
Mã:http://www.ultrapico.com/ExpressoDownload.htm
If you have written regular expressions before, you know that the regex syntax can be hard to keep track of. Certainly when writing a regex pattern that uses plenty of grouping and alternation.
RegexBuddy's regex building blocks make it much easier to define regular expressions. Instead of typing in regex tokens directly, just pick what you want from a descriptive menu. Use RegexBuddy's neatly organized tree of regex tokens to keep track of the pattern you have built so far. Collapse grouping tokens (with green icons) to get a clear overview of complex regular expressions.
If you are already familiar with the regex syntax, you can edit the regexp directly. RegexBuddy updates its regex tree as you type, and highlights the token that the text cursor points at. That way you can easily keep track of what you are doing, without losing the speed of directly typing in the regex pattern.
When the brief descriptions are not clear enough, just click the Explain Token button to access RegexBuddy's detailed regular expression tutorial. You will find answers to all your questions there. (At least, those questions concerning regular expressions.)
With RegexBuddy you can quickly and easily create and edit regular expressions. Mix manipulating RegexBuddy's building blocks and directly editing the regex pattern to suit your own skill and style. Rely on RegexBuddy as you rely on a buddy or coach to assist you.
Once you created a regular expression, test it on sample data, store it for later reuse, and send it to the application you are working with.
Homepage:
www.regexbuddy.com
Mã:http://rapidshare.com/files/79907924/RegexBuddy.3.1.0.Incl.*****ed-PCL.zip.html
Xem tại :
Mã:http://regexlib.com/DisplayPatterns.aspx
-
21-11-2008, 05:55 PM #8Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Expresso nó tuy hay nhưng ko free, các bạn có thể dùng Free Regular Expression Designer (Radsoftware) được viết bằng C# cũng rất hay và free
Mã:http://www.radsoftware.com.au/regexdesigner/
Mã:public static bool CheckLine(string input) { Regex linepattern = new Regex(@"[a-z A-Z 0-9]\=[a-z A-Z 0-9]+\.$"); return linepattern.IsMatch(input); }
Mã:bool result1 = StaticMethods.CheckLine("msg2=Excuse me.");
Mã:bool result2 = StaticMethods.CheckLine("msg2=Xin làm phiền các bạn.");
Mã:result1 = true cònresult2 = false ngay
Cám ơn rất nhiều [IMG]images/smilies/applause.gif[/IMG]
-
24-11-2008, 04:25 PM #9Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Về nguyên tắc, thằng Regular Expression này là ko thể học được vì chỉ cần bạn ko xài một thời gian là sẽ quên sạch.
Cho nên tốt nhất là có một cuốn ebook + một tool về Regex để sẵn trong máy, khi nào cần thì lấy ra tra.
@O'Wicked Fox: Expresso (hay nên là Capuchino nhỉ [IMG]images/smilies/biggrin.png[/IMG] ) có free mà cậu [IMG]images/smilies/smile.png[/IMG]
-
04-08-2012, 03:05 PM #10Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Vd: mình có chuối là: string s = "a1_a2_a3";
Vậy làm sao mình kiểm tra khi người dùng nhập vào textbox là đúng theo mẫu tổng quát đó nhỉ?
bắt buộc chuỗi phải sen kẽ 2 dấu gạch dưới như trên!??
Không chỉ dừng lại ở việc sử dụng nguyên liệu cao cấp, mỗi công trình còn được "chăm sóc" bằng 4 dịch vụ xuất sắc của Tre Nghệ. Từ việc tư vấn, thiết kế đến thi công và hoàn thiện, mọi quy trình đều...
Chất Lượng và Sáng Tạo: Kiến Trúc...