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

C#正則表達式匹配引擎的細節淺析

開發 后端
C#正則表達式匹配引擎的細節是什么呢?C#正則表達式匹配引擎的細節需要注意什么呢?那么本文就向你介紹相關的內容。

C#正則表達式匹配引擎的細節是什么呢?需要注意什么呢?讓我們開始我們的講述:

現在,我們通過一個組結構來理解一個稍微復雜的例子。看下面的C#正則表達式匹配引擎的細節例子: 

  1. string text = "abracadabra1abracadabra2abracadabra3";   
  2.      
  3. string pat = @"   
  4.      
  5. ( # ***個組的開始   
  6.      
  7.  abra # 匹配字符串abra   
  8.      
  9.  ( # 第二個組的開始   
  10.      
  11.  cad # 匹配字符串cad   
  12.      
  13.  )? # 第二個組結束(可選)   
  14.      
  15. ) # ***個組結束   
  16.      
  17. + # 匹配一次或多次   
  18.      
  19. ";   
  20.      
  21. //利用x修飾符忽略注釋   
  22.      
  23. Regex r = new Regex(pat, "x");   
  24.      
  25. //獲得組號碼的清單   
  26.      
  27. int[] gnums = r.GetGroupNumbers();   
  28.      
  29. //***匹配   
  30.      
  31. Match m = r.Match(text);   
  32.      
  33. while (m.Success)   
  34.      
  35.  {   
  36.      
  37. //從組1開始   
  38.      
  39.  for (int i = 1; i < gnums.Length; i++)   
  40.      
  41. {   
  42.      
  43. Group g = m.Group(gnums[i]);   
  44.      
  45. //獲得這次匹配的組   
  46.      
  47. Console.WriteLine("Group"+gnums[i]+"=["+g.ToString()+"]");   
  48.      
  49. //計算這個組的起始位置和長度   
  50.      
  51. CaptureCollection cc = g.Captures;   
  52.      
  53. for (int j = 0; j < cc.Count; j++)   
  54.      
  55.  {   
  56.      
  57.  Capture c = cc[j];   
  58.      
  59.  Console.WriteLine(" Capture" + j + "=["+c.ToString()   
  60.      
  61.  + "] Index=" + c.Index + " Length=" + c.Length);   
  62.      
  63.  }   
  64.      
  65. }   
  66.      
  67. //下一個匹配   
  68.      
  69.  m = m.NextMatch();   
  70.      
  71.  }  

這個C#正則表達式匹配引擎的細節實例的輸出如下所示:

  1. Group1=[abra]   
  2.      
  3. Capture0=[abracad] Index=0 Length=7   
  4.      
  5. Capture1=[abra] Index=7 Length=4   
  6.      
  7. Group2=[cad]   
  8.      
  9. Capture0=[cad] Index=4 Length=3   
  10.      
  11. Group1=[abra]   
  12.      
  13. Capture0=[abracad] Index=12 Length=7   
  14.      
  15. Capture1=[abra] Index=19 Length=4   
  16.      
  17. Group2=[cad]   
  18.      
  19. Capture0=[cad] Index=16 Length=3   
  20.      
  21. Group1=[abra]   
  22.      
  23. Capture0=[abracad] Index=24 Length=7   
  24.      
  25. Capture1=[abra] Index=31 Length=4   
  26.      
  27. Group2=[cad]   
  28.      
  29. Capture0=[cad] Index=28 Length=3  

我們首先從考查字符串pat開始,pat中包含有表達式。***個capture是從***個圓括號開始的,然后表達式將匹配到一個abra。第二個capture組從第二個圓括號開始,但***個capture組還沒有結束,這意味著***個組匹配的結果是abracad ,而第二個組的匹配結果僅僅是cad。因此如果通過使用?符號而使cad成為一項可選的匹配,匹配的結果就可能是abra或abracad。然后,***個組就會結束,通過指定+符號要求表達式進行多次匹配。
  
現在我們來看看匹配過程中發生的情況。首先,通過調用Regex的constructor方法建立表達式的一個實例,并在其中指定各種選項。在這個例子中,由于在表達式中有注釋,因此選用了x選項,另外還使用了一些空格。打開x選項,表達式將會忽略注釋和其中沒有轉義的空格。
  
然后,取得表達式中定義的組的編號的清單。你當然可以顯性地使用這些編號,在這里使用的是編程的方法。如果使用了命名的組,作為一種建立快速索引的途徑這種方法也十分有效。
  
接下來是完成***次匹配。通過一個循環測試當前的匹配是否成功,接下來是從group 1開始重復對組清單執行這一操作。在這個例子中沒有使用group 0的原因是group 0是一個完全匹配的字符串,如果要通過收集全部匹配的字符串作為一個單一的字符串,就會用到group 0了。
  
我們跟蹤每個group中的CaptureCollection。通常情況下每次匹配、每個group中只能有一個capture,但本例中的Group1則有兩個capture:Capture0和Capture1。如果你僅需要Group1的ToString,就會只得到abra,當然它也會與abracad匹配。組中ToString的值就是其CaptureCollection中***一個Capture的值,這正是我們所需要的。如果你希望整個過程在匹配abra后結束,就應該從表達式中刪除+符號,讓regex引擎知道我們只需要對表達式進行匹配。

C#正則表達式匹配引擎的細節的基本內容就向你介紹到這里,希望對你有所幫助。

【編輯推薦】

  1. C#正則表達式Match類淺析
  2. C#正則表達式MatchCollection類淺析
  3. C#正則表達式GroupCollection類淺析
  4. C#正則表達式CaptureCollection類淺析
  5. C#正則表達式Capture類簡析
責任編輯:仲衡 來源: blueidea.com
相關推薦

2009-08-07 15:16:10

C#正則表達式

2009-09-16 17:15:57

正則表達式引擎

2009-08-20 13:38:58

C#正則表達式

2009-08-20 15:02:41

C#正則表達式

2009-08-20 15:10:33

C#正則表達式

2009-08-20 15:06:51

C#正則表達式

2009-08-20 14:57:00

C#正則表達式

2009-08-20 14:43:03

C#正則表達式Rege

2009-08-20 13:09:28

C#正則表達式

2009-09-16 18:08:14

正則表達式匹配單詞

2009-08-13 15:02:52

C#正則表達式引擎貪婪

2009-08-20 13:34:36

C#正則表達式

2009-08-20 13:57:27

C#正則表達式

2009-08-20 13:26:35

C#正則表達式

2009-09-16 13:24:30

PHP正則表達式匹配

2009-08-17 13:56:28

C#正則表達式入門

2009-08-03 17:27:14

C#正則表達式

2009-08-20 14:31:55

C#正則表達式字符串

2009-08-20 13:30:38

C#正則表達式

2009-09-16 13:53:17

PHP正則表達式匹配
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产在视频一区二区三区吞精 | 涩爱av一区二区三区 | 亚洲精品一区二区三区中文字幕 | 亚洲精品久久久久国产 | 亚洲激情在线观看 | 亚洲444eee在线观看 | 日韩三级免费观看 | 精品九九| 嫩草视频免费 | 国产欧美精品区一区二区三区 | 精品96久久久久久中文字幕无 | 国产精品久久久久久238 | 国产精品一区二区福利视频 | 精品国产一区二区三区久久久蜜月 | 国产精品国产三级国产aⅴ无密码 | 日韩精品一区二区在线观看 | 亚洲国产精品久久 | 狠狠av| 天堂国产 | 国产精品亚洲一区二区三区在线 | 成人网在线观看 | 欧美日韩一二三区 | 精品一区二区三区四区五区 | 男人久久天堂 | 久久久做 | 亚洲a一区| 午夜影院在线 | 草比av| 伊人手机在线视频 | 中文字幕一区二区三区不卡在线 | 精品网 | 色爱综合网 | 国产亚洲精品久久情网 | 手机看黄av免费网址 | av大片| 国产成人福利在线 | 亚洲欧美综合 | 成人在线观看网址 | 久久久久资源 | 午夜久久久久久久久久一区二区 | 国产高清在线精品一区二区三区 |