<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 30,  comments - 3,  trackbacks - 0

    1        概述

    1.1     什么是捕獲組

    捕獲組就是把正則表達式中子表達式匹配的內容,保存到內存中以數字編號或顯式命名的組里,方便后面引用。當然,這種引用既可以是在正則表達式內部,也可以是在正則表達式外部。

    捕獲組有兩種形式,一種是普通捕獲組,另一種是命名捕獲組,通常所說的捕獲組指的是普通捕獲組。語法如下:

    普通捕獲組:(Expression)

    命名捕獲組:(?<name>Expression)

    普通捕獲組在大多數支持正則表達式的語言或工具中都是支持的,而命名捕獲組目前只有.NETPHPPython等部分語言支持,據說Java會在7.0中提供對這一特性的支持。上面給出的命名捕獲組的語法是.NET中的語法,另外在.NET中使用(?’name’Expression)與使用(?<name>Expression)是等價的。在PHPPython中命名捕獲組語法為:(?P<name>Expression)。

    另外需要說明的一點是,除(Expression)(?<name>Expression)語法外,其它的(?...)語法都不是捕獲組。

    1.2     捕獲組編號規則

    編號規則指的是以數字為捕獲組進行編號的規則,在普通捕獲組或命名捕獲組單獨出現的正則表達式中,編號規則比較清晰,在普通捕獲組與命名捕獲組混合出現的正則表達式中,捕獲組的編號規則稍顯復雜。

    在展開討論之前,需要說明的是,編號為0的捕獲組,指的是正則表達式整體,這一規則在支持捕獲組的語言中,基本上都是適用的。下面對其它編號規則逐一展開討論。

    1.2.1  普通捕獲組編號規則

    如果沒有顯式為捕獲組命名,即沒有使用命名捕獲組,那么需要按數字順序來訪問所有捕獲組。在只有普通捕獲組的情況下,捕獲組的編號是按照“(”出現的順序,從左到右,從1開始進行編號的 。

    正則表達式:(\d{4})-(\d{2}-(\d\d))

     普通捕獲組 

    上面的正則表達式可以用來匹配格式為yyyy-MM-dd的日期,為了在下表中得以區分,月和日分別采用了\d{2}\d\d這兩種寫法。

    用以上正則表達式匹配字符串:2008-12-31,匹配結果為:

    編號

    命名

    捕獲組

    匹配內容

    0

     

    (\d{4})-(\d{2}-(\d\d))

    2008-12-31

    1

     

    (\d{4})

    2008

    2

     

    (\d{2}-(\d\d))

    12-31

    3

     

    (\d\d)

    31

    1.2.2  命名捕獲組編號規則

    命名捕獲組通過顯式命名,可以通過組名方便的訪問到指定的組,而不需要去一個個的數編號,同時避免了在正則表達式擴展過程中,捕獲組的增加或減少對引用結果導致的不可控。

    不過容易忽略的是,命名捕獲組也參與了編號的,在只有命名捕獲組的情況下,捕獲組的編號也是按照“(”出現的順序,從左到右,從1開始進行編號的 。

    正則表達式:(?<year>\d{4})-(?<date>\d{2}-(?<day>\d\d))

    命名捕獲組 

    用以上正則表達式匹配字符串:2008-12-31

    匹配結果為:

    編號

    命名

    捕獲組

    匹配內容

    0

     

    (?<year>\d{4})-(?<date>\d{2}-(?<day>\d\d))

    2008-12-31

    1

    year

    (?<year>\d{4})

    2008

    2

    date

    (?<date>\d{2}-(?<day>\d\d))

    12-31

    3

    day

    (?<day>\d\d)

    31

    1.2.3  普通捕獲組與命名捕獲組混合編號規則

    當一個正則表達式中,普通捕獲組與命名捕獲組混合出現時,捕獲組的編號規則稍顯復雜。對于其中的命名捕獲組,隨時都可以通過組名進行訪問,而對于普通捕獲組,則只能通過確定其編號后進行訪問。

    混合方式的捕獲組編號,首先按照普通捕獲組中“(”出現的先后順序,從左到右,從1開始進行編號,當普通捕獲組編號完成后,再按命名捕獲組中“(”出現的先后順序,從左到右,接著普通捕獲組的編號值繼續進行編號。

    也就是先忽略命名捕獲組,對普通捕獲組進行編號,當普通捕獲組完成編號后,再對命名捕獲組進行編號。

    正則表達式:(\d{4})-(?<date>\d{2}-(\d\d))

     捕獲組——混合

    用以上正則表達式匹配字符串:2008-12-31,匹配結果為:

    編號

    命名

    捕獲組

    匹配內容

    0

     

    (\d{4})-(?<date>\d{2}-(\d\d))

    2008-12-31

    1

     

    (\d{4})

    2008

    3

    date

    (?<date>\d{2}-(\d\d))

    12-31

    2

     

    (\d\d)

    31





    轉自:http://blog.csdn.net/lxcnn/article/details/4146148
    posted on 2013-02-11 16:26 Seraphi 閱讀(1951) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲最大天堂无码精品区| 亚洲一卡2卡三卡4卡有限公司| ww亚洲ww在线观看国产| 免费观看黄色的网站| 亚洲欧洲日产国码在线观看| 最近中文字幕mv免费高清视频8| 亚洲av日韩av无码| 蜜桃视频在线观看免费视频网站WWW| 亚洲国产第一站精品蜜芽| 性色午夜视频免费男人的天堂| 亚洲国产一区在线| 青青青国产在线观看免费网站| 亚洲中文字幕久久久一区| 热99re久久免费视精品频软件 | 亚洲日韩国产精品乱| 香港经典a毛片免费观看看| 激情综合色五月丁香六月亚洲| a级毛片免费观看视频| 久久精品国产亚洲AV无码娇色| 猫咪免费人成网站在线观看| 亚洲中文字幕乱码熟女在线| 免费在线观看黄网站| 免费精品久久天干天干| 亚洲欧洲国产经精品香蕉网| 国内自产少妇自拍区免费| 免费一级全黄少妇性色生活片| 亚洲AV永久精品爱情岛论坛| 四虎精品视频在线永久免费观看 | 亚洲狠狠婷婷综合久久蜜芽| 波多野结衣一区二区免费视频 | 曰批全过程免费视频播放网站| 亚洲一卡2卡三卡4卡无卡下载| 一区二区三区亚洲视频| 三年片在线观看免费大全电影| 亚洲综合一区国产精品| 亚洲精品无码日韩国产不卡?V| 69式互添免费视频| 五级黄18以上免费看| 亚洲国产精品久久人人爱| 亚洲国产a级视频| 免费阿v网站在线观看g|