久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

正則表達(dá)式使用高級(jí)技巧之組的概念

 gingging 2009-12-10
正則表達(dá)式中的組是很重要的一個(gè)概念,,它是我們通向高級(jí)正則應(yīng)用的的橋梁,。

組的概念

一個(gè)正則表達(dá)式匹配結(jié)果可以分成多個(gè)部分,,這就是組(Group)的目的,。能夠靈活的使用組后,,你會(huì)發(fā)現(xiàn)Regex真是很方便,,也很強(qiáng)大,。

先舉個(gè)例子
  1. public static void Main()    
  2. {    
  3.  string s = "2005-2-21";    
  4.  Regex reg = new Regex(@"(?<y>\d{4})-(?<m>\d{1,2})-(?<d>\d{1,2})",RegexOptions.Compiled);    
  5.  Match match = reg.Match(s);    
  6.  int year = int.Parse(match.Groups["y"].Value);    
  7.  int month = int.Parse(match.Groups["m"].Value);    
  8.  int day = int .Parse(match.Groups["d"].Value);    
  9.  DateTime time = new DateTime(year,month,day);    
  10.  Console.WriteLine(time);    
  11.  Console.ReadLine();    
  12. }    
以上的例子通過(guò)組來(lái)實(shí)現(xiàn)分析一個(gè)字符串,,并把其轉(zhuǎn)化為一個(gè)DateTime實(shí)例,當(dāng)然,,這個(gè)功能用DateTime.Parse方法就能很方便的實(shí)現(xiàn),。

在這個(gè)例子中,我把一次Match結(jié)果用(?<name>)的方式分成三個(gè)組"y","m","d"分別代表年,、月,、日。

現(xiàn)在我們已經(jīng)有了組的概念了,,再來(lái)看如何分組,,很簡(jiǎn)單的,除了上在的辦法,,我們可以用一對(duì)括號(hào)就定義出一個(gè)組,,比如上例可以改成:
  1. public static void Main()    
  2. {    
  3.  string s = "2005-2-21";    
  4.  Regex reg = new Regex(@"(\d{4})-(\d{1,2})-(\d{1,2})",RegexOptions.Compiled);    
  5.  Match match = reg.Match(s);    
  6.  int year = int.Parse(match.Groups[1].Value);    
  7.  int month = int.Parse(match.Groups[2].Value);    
  8.  int day = int .Parse(match.Groups[3].Value);    
  9.  DateTime time = new DateTime(year,month,day);    
  10.  Console.WriteLine(time);    
  11.  Console.ReadLine();    
  12. }   
從上例可以看出,第一個(gè)括號(hào)對(duì)包涵的組被自動(dòng)編號(hào)為1,后面的括號(hào)依次編號(hào)為2,、3……
  1. public static void Main()    
  2. {    
  3.  string s = "2005-2-21";    
  4.  Regex reg = new Regex(@"(?<2>\d{4})-(?<1>\d{1,2})-(?<3>\d{1,2})",RegexOptions.Compiled);    
  5.  Match match = reg.Match(s);    
  6.  int year = int.Parse(match.Groups[2].Value);    
  7.  int month = int.Parse(match.Groups[1].Value);    
  8.  int day = int .Parse(match.Groups[3].Value);    
  9.  DateTime time = new DateTime(year,month,day);      
  10.  Console.WriteLine(time);    
  11.  Console.ReadLine();    
  12. }    
再看上例,,我們用(?<數(shù)字>)的方式手工給每個(gè)括號(hào)對(duì)的組編號(hào),(注意我定義1和2的位置時(shí)不是從左到右定義的)

通過(guò)以上三例,,我們知道了給Regex定義Group的三種辦法以及相應(yīng)的引用組匹配結(jié)果的方式,。

然后,關(guān)于組定義,,還有兩點(diǎn)請(qǐng)注意:

1,、因?yàn)槔ㄌ?hào)用于定義組了,所以如果要匹配"("和")",,請(qǐng)使用"\("和"\)"(關(guān)于所有特殊字符的定義,,請(qǐng)查看相關(guān)Regex expression幫助文檔)。

2,、如果定義Regex時(shí),,使用了ExplicitCapture選項(xiàng),,則第二個(gè)例子不會(huì)成功,因?yàn)榇诉x項(xiàng)要求顯式定義了編號(hào)或名字的組才捕獲并保存結(jié)果,,如果你沒(méi)有定義ExplicitCapture選項(xiàng),,而有時(shí)又定義了類式于(A|B)這樣的部分在表達(dá)式,而這個(gè)(A|B)你又并不想捕獲結(jié)果,,那么可以使用"不捕獲的組"語(yǔ)法,,即定義成(?:)的方式,針對(duì)于(A|B),你可以這樣來(lái)定義以達(dá)到不捕獲并保存它到Group集合中的目的--(?:A|B),。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多