成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C#基礎之C#中的正則表達式

開發 后端
關于正則表達式,我們都知道挺繁瑣的。本文介紹的是C#中的正則表達式,希望對你有幫助,一起來看。

正則表達式的全面模式匹配表示法可以快速地分析大量的文本以找到特定的字符模式;提取、編輯、替換或刪除文本子字符串;或將提取的字符串添加到集合以生成報告。介紹兩篇文章,《詳細介紹正則表達式(上)》和《詳細介紹正則表達式(下)》,供大家參考。

1、正則表達式簡介

正則表達式提供了功能強大、靈活而又高效的方法來處理文本。正則表達式的全面模式匹配表示法可以快速地分析大量的文本以找到特定的字符模式;提取、編輯、替換或刪除文本子字符串;或將提取的字符串添加到集合以生成報告。對于處理字符串(例如 HTML處理、日志文件分析和 HTTP 標頭分析)的許多應用程序而言,正則表達式是不可缺少的工具。

.NET 框架正則表達式并入了其他正則表達式實現的最常見功能,被設計為與 Perl 5 正則表達式兼容,.NET 框架正則表達式還包括一些在其他實現中尚未提供的功能,.NET 框架正則表達式類是基類庫的一部分,并且可以和面向公共語言運行庫的任何語言或工具一起使用。

2、字符串搜索

正則表達式語言由兩種基本字符類型組成:原義(正常)文本字符和元字符。正是元字符組為正則表達式提供了處理能力。當前,所有的文本編輯器都有一些搜索功能,通常可以打開一個對話框,在其中的一個文本框中鍵入要定位的字符串,如果還要同時進行替換操作,可以鍵入一個替換字符串,比如在Windows操作系統中的記事本、Office系列中的文檔編輯器都有這種功能。

這種搜索最簡單的方式,這類問題很容易用String類的String.Replace()方法來解決,但如果需要在文檔中識別某個重復的,該怎么辦?編寫一個例程,從一個String類中選擇重復的字是比較復雜的,此時使用語言就很適合。

一般表達式語言是一種可以編寫搜索表達式的語言。在該語言中,可以把文檔中要搜索的文本、轉義序列和特定含義的其他字符組合在一起,例如序列b表示一個字的開頭和結尾(子的邊界),如果要表示正在查找的以字符th開頭的字,就可以編寫一般表達式bth(即序列字符界是-t-h)。如果要搜索所有以th結尾的字,就可以編寫thb(序列t-h-字邊界)。但是,一般表達式要比這復雜得多,例如,可以在搜索操作中找到存儲部分文本的工具性程序(facility)。

3、.NET 框架的正則表達式類

下面通過介紹 .NET 框架的正則表達式類,熟悉一下.NET框架下的正則表達式的使用方法。

3.1 Regex 類表示只讀正則表達式

Regex 類包含各種靜態方法,允許在不顯式實例化其他類的對象的情況下使用其他正則表達式類。以下代碼示例創建了 Regex 類的實例并在初始化對象時定義一個簡單的正則表達式。請注意,使用了附加的反斜杠作為轉義字符,它將 s 匹配字符類中的反斜杠指定為原義字符。

 

  1. Regex r; // 聲明一個 Regex類的變量  
  2. r = new Regex("\s2000"); // 定義表達式 

 

3.2 Match 類表示正則表達式匹配操作的結果

以下示例使用 Regex 類的 Match 方法返回 Match 類型的對象,以便找到輸入字符串中第一個匹配。此示例使用 Match 類的 Match.Success 屬性來指示是否已找到匹配。

 

  1. Regex r = new Regex("abc"); // 定義一個Regex對象實例  
  2. Match m = r.Match("123abc456"); // 在字符串中匹配  
  3. if (m.Success)  
  4. {  
  5. Console.WriteLine("Found match at position " + m.Index); //輸入匹配字符的位置  

 

3.3 MatchCollection 類表示非重疊匹配的序列

該集合為只讀的,并且沒有公共構造函數。MatchCollection 的實例是由 Regex.Matches 屬性返回的。使用 Regex 類的 Matches 方法,通過在輸入字符串中找到的所有匹配填充 MatchCollection。下面代碼示例演示了如何將集合復制到一個字符串數組(保留每一匹配)和一個整數數組(指示每一匹配的位置)中。

 

  1. MatchCollection mc;  
  2. String[] results = new String[20];  
  3. int[] matchposition = new int[20];  
  4. Regex r = new Regex("abc"); //定義一個Regex對象實例  
  5. mc = r.Matches("123abc4abcd");  
  6. for (int i = 0; i < mc.Count; i++) //在輸入字符串中找到所有匹配  
  7. {  
  8. results = mc.Value; //將匹配的字符串添在字符串數組中  
  9. matchposition = mc.Index; //記錄匹配字符的位置  

 

3.4 GroupCollection 類表示捕獲的組的集合

該集合為只讀的,并且沒有公共構造函數。GroupCollection 的實例在 Match.Groups 屬性返回的集合中返回。下面的控制臺應用程序查找并輸出由正則表達式捕獲的組的數目。

 

  1. using System;  
  2. using System.Text.RegularExpressions;  
  3. public class RegexTest  
  4. {  
  5. public static void RunTest()  
  6. {  
  7. Regex r = new Regex("(a(b))c"); //定義組  
  8. Match m = r.Match("abdabc");  
  9. Console.WriteLine("Number of groups found = " + m.Groups.Count);  
  10. }  
  11. public static void Main()  
  12. {  
  13. RunTest();  
  14. }  

 

該示例產生下面的輸出:

Number of groups found = 3

3.5 CaptureCollection 類表示捕獲的子字符串的序列

由于限定符,捕獲組可以在單個匹配中捕獲多個字符串。Captures屬性(CaptureCollection 類的對象)是作為 Match 和 group 類的成員提供的,以便于對捕獲的子字符串的集合的訪問。例如,如果使用正則表達式 ((a(b))c)+(其中 + 限定符指定一個或多個匹配)從字符串"abcabcabc"中捕獲匹配,則子字符串的每一匹配的 Group 的 CaptureCollection 將包含三個成員。

下面的程序使用正則表達式 (Abc)+來查找字符串"XYZAbcAbcAbcXYZAbcAb"中的一個或多個匹配,闡釋了使用 Captures 屬性來返回多組捕獲的子字符串。

 

  1. using System;  
  2. using System.Text.RegularExpressions;  
  3. public class RegexTest  
  4. {  
  5. public static void RunTest()  
  6. {  
  7. int counter;  
  8. Match m;  
  9. CaptureCollection cc;  
  10. GroupCollection gc;  
  11. Regex r = new Regex("(Abc)+"); //查找"Abc"  
  12. m = r.Match("XYZAbcAbcAbcXYZAbcAb"); //設定要查找的字符串  
  13. gc = m.Groups;  
  14. //輸出查找組的數目  
  15. Console.WriteLine("Captured groups = " + gc.Count.ToString());  
  16. // Loop through each group.  
  17. for (int i=0; i < gc.Count; i++) //查找每一個組  
  18. {  
  19. cc = gc.Captures;  
  20. counter = cc.Count;  
  21. Console.WriteLine("Captures count = " + counter.ToString());  
  22. for (int ii = 0; ii < counter; ii++)  
  23. {  
  24. // Print capture and position.  
  25. Console.WriteLine(cc[ii] + " Starts at character " +  
  26. cc[ii].Index); //輸入捕獲位置  
  27. }  
  28. }  
  29. }  
  30. public static void Main() {  
  31. RunTest();  
  32. }  

 

此例返回下面的輸出結果:

 

  1. Captured groups = 2 
  2. Captures count = 1 
  3. AbcAbcAbc Starts at character 3  
  4. Captures count = 3 
  5. Abc Starts at character 3  
  6. Abc Starts at character 6  
  7. Abc Starts at character 9 

 

3.6 Capture 類包含來自單個子表達式捕獲的結果

在 Group 集合中循環,從 Group 的每一成員中提取 Capture 集合,并且將變量 posn 和 length 分別分配給找到每一字符串的初始字符串中的字符位置,以及每一字符串的長度。

 

  1. Regex r;  
  2. Match m;  
  3. CaptureCollection cc;  
  4. int posn, length;  
  5. r = new Regex("(abc)*");  
  6. m = r.Match("bcabcabc");  
  7. for (int i=0; m.Groups.Value != ""; i++)  
  8. {  
  9. cc = m.Groups.Captures;  
  10. for (int j = 0; j < cc.Count; j++)  
  11. {  
  12. posn = cc[j].Index; //捕獲對象位置  
  13. length = cc[j].Length; //捕獲對象長度  
  14. }  

 

把組合字符組合起來后,每次都會返回一個組對象,就可能并不是我們希望的結果。如果希望把組合字符作為搜索模式的一部分,就會有相當大的系統開銷。對于單個的組,可以用以字符序列"?:"開頭的組禁止這么做,就像URI樣例那樣。而對于所有的組,可以在RegEx.Matches()方法上指定RegExOptions.ExplicitCapture標志。

希望通過本文對正則表達式的介紹,能夠給你帶來幫助。

【編輯推薦】

  1. 趣味編程:C#掃雷代碼
  2. 淺談C++調用C#的DLL程序方法
  3. C#基礎概念之委托
  4. 利用C#實現任務欄通知窗口
  5. C#中簡單的正則表達式
責任編輯:于鐵 來源: 互聯網
相關推薦

2009-08-17 13:56:28

C#正則表達式入門

2009-08-07 15:16:10

C#正則表達式

2009-08-03 17:27:14

C#正則表達式

2011-04-25 08:44:34

C#正則表達式

2009-08-20 13:09:28

C#正則表達式

2009-08-11 13:00:41

C#正則表達式

2009-08-13 15:24:27

C#正則表達式

2024-12-16 07:33:45

C#正則表達式

2009-08-20 13:57:27

C#正則表達式

2009-08-20 13:26:35

C#正則表達式

2009-08-13 15:02:52

C#正則表達式引擎貪婪

2009-08-14 15:50:45

C#正則表達式

2009-08-20 15:02:41

C#正則表達式

2009-08-20 15:10:33

C#正則表達式

2021-03-02 07:33:13

開發C#字符

2009-08-20 15:06:51

C#正則表達式

2009-08-20 14:57:00

C#正則表達式

2009-08-14 17:52:30

C#表達式工具

2009-08-20 16:23:32

C#正則表達式語法

2009-08-24 17:14:41

正則表達式C#和.NET框架
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精品电影在线 | 欧美一级黄色片免费观看 | 青青草社区 | 在线观看第一页 | 日韩免 | 久久不卡日韩美女 | 亚洲精品久久区二区三区蜜桃臀 | av免费在线观看网站 | 亚洲精品国产成人 | 日韩欧美在线观看 | 日韩一区二区三区精品 | 一区二区精品 | 夜夜骑av | 91文字幕巨乱亚洲香蕉 | 综合久 | 日韩精品一区二区三区在线 | 日韩欧美在线视频观看 | 色在线免费 | 欧美精品在线免费观看 | 亚洲图片一区二区三区 | 久久久.com | 一区二区三区欧美在线观看 | 狠狠骚 | 国产精品久久久久久妇女6080 | 久久免费视频观看 | 国产高清在线 | 欧美日韩亚洲国产 | 国产精品亚洲一区二区三区在线观看 | 精品自拍视频 | 91麻豆精品国产91久久久久久久久 | 成人在线观看免费 | 91色综合 | 色综合99 | 国产欧美日韩在线播放 | 狠狠色综合网站久久久久久久 | 成人av电影在线 | 欧美精品一二区 | 国产精品视频免费 | 麻豆视频国产在线观看 | 激情五月婷婷 | 91视频国产一区 |