from http://www.regexlab.com/zh/regref.htm
          1. 其他一些代表抽象意義的特殊符號
          |
          左右兩邊表達式之間 "或" 關系,匹配左邊或者右邊

          ( )
          (1). 在被修飾匹配次數的時候,括號中的表達式可以作為整體被修飾
          (2). 取匹配結果的時候,括號中的表達式匹配到的內容可以被單獨得到

          舉例:表達式 "(go\s*)+" 在匹配 "Let's go go go!" 時,匹配結果是:成功;匹配到內容是:"go go go";匹配到的位置是:開始于6,結束于14。
          2. 匹配次數中的貪婪與非貪婪
          貪婪模式:
          在使用修飾匹配次數的特殊符號時,有幾種表示方法可以使同一個表達式能夠匹配不同的次數,比如:"{m,n}", "{m,}", "?", "*", "+",具體匹配的次數隨被匹配的字符串而定。這種重復匹配不定次數的表達式在匹配過程中,總是盡可能多的匹配。
          非貪婪模式:
          在修飾匹配次數的特殊符號后再加上一個 "?" 號,則可以使匹配次數不定的表達式盡可能少的匹配,使可匹配可不匹配的表達式,盡可能的 "不匹配"。這種匹配原則叫作 "非貪婪" 模式,也叫作 "勉強" 模式。如果少匹配就會導致整個表達式匹配失敗的時候,與貪婪模式類似,非貪婪模式會最小限度的再匹配一些,以使整個表達式匹配成功。
          3. 反向引用
          表達式在匹配時,表達式引擎會將小括號 "( )" 包含的表達式所匹配到的字符串記錄下來。在獲取匹配結果的時候,小括號包含的表達式所匹配到的字符串可以單獨獲取。在實際應用場合中,當用某種邊界來查找,而所要獲取的內容又不包含邊界時,必須使用小括號來指定所要的范圍。比如 ">td<(.*?)>/td<"。
          其實,"小括號包含的表達式所匹配到的字符串" 不僅是在匹配結束后才可以使用,在匹配過程中也可以使用。表達式后邊的部分,可以引用前面 "括號內的子匹配已經匹配到的字符串"。引用方法是 "\" 加上一個數字。"\1" 引用第1對括號內匹配到的字符串,"\2" 引用第2對括號內匹配到的字符串……以此類推,如果一對括號內包含另一對括號,則外層的括號先排序號。換句話說,哪一對的左括號 "(" 在前,那這一對就先排序號。
          舉例:表達式 "('|")(.*?)(\1)" 在匹配 " 'Hello', "World" " 時,匹配結果是:成功;匹配到的內容是:" 'Hello' "。再次匹配下一個時,可以匹配到 " "World" "。

          posts - 403, comments - 310, trackbacks - 0, articles - 7
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          2.20 - 正則表達式

          Posted on 2007-04-22 20:24 ZelluX 閱讀(373) 評論(0)  編輯  收藏 所屬分類: OOP
          2007-02-20 23:33:53
          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 石城县| 扶余县| 闸北区| 肇庆市| 金乡县| 望城县| 内丘县| 建始县| 威信县| 马鞍山市| 通海县| 文安县| 西青区| 兴化市| 凤阳县| 山东省| 信宜市| 永川市| 鄯善县| 天峻县| 澎湖县| 宁陕县| 武汉市| 南康市| 颍上县| 吉木萨尔县| 云浮市| 桦南县| 曲周县| 安吉县| 长治县| 田林县| 铁岭县| 奉节县| 柏乡县| 霍林郭勒市| 昌都县| 庆安县| 正阳县| 安乡县| 原阳县|