1. 程式人生 > >正則表示式之分組(捕獲)、後向引用

正則表示式之分組(捕獲)、後向引用

       分組 

        正則表示式中的分組又稱為子表示式,就是把一個正則表示式的全部或部分當做一個整體進行

  處理,分成一個或多個組。其中分組是使用“()”表示的。進行分組之後“()”裡面的內容就會被當

  成一個整體來處理。

         先看看一個具體的例子吧:

           

           同時我們可以使用“()”限制替換的範圍

         分組可以分為捕獲組和非捕獲組.

          捕獲組

                     可以通過從左到右通過其括號對其進行編號:

                   

              需要注意的是組零永遠代表的是整個正則式,通過這樣命名儲存了匹配分組的匹配的序列,

        捕獲的子序列就可以通過後向引用在表示式中使用了,也可以從匹配器中檢索。

             至於後向引用其實就是對匹配組的一種快捷指令,用法後面會介紹.

             非捕獲組

                   以 (?) 開頭的組是純的非捕獲 組,它不捕獲文字 ,也不針對組合計進行計數。就是說,

                  如果小括號中以?號開頭,那麼這個分組就不會捕獲文字,當然也不會有組的編號,因此

                  也不存在Back 引用。

                   

           

                   測試匹配性   (?<!4)56(?=9) 這裡的含義就是匹配後面的文字56前面不能是4,後面必須

                         是9組成。因此,可以匹配如下文字 5569  ,與4569不匹配。

              

       後向引用

             當一個正則表示式被分組後,每個組將會自動的分配一個組號用於代表該組的表示式,

          其中,組號的編制規則為:從左到右、以分組的左括號“(”為標誌,第一個分組的組號為1

          第二個分組的組號為2,以此類推。

               反向引用提供查詢重複字元組的方便的方法。它們可被認為是再次匹配同一個字串的快捷指令。

          如何理解呢?先看看一個例子吧。

             1、匹配“javajava”

                    僅僅使用分組實現:(java)(java)

                    使用後向引用的方法:(java)\1

                   

         貌似上面也沒看出啥區別呀,在來一個例子

            2、直接對比(\w)\1和(\w)(\w)的區別

         

                  該正則匹配的是出現兩次的字元.\1將重複匹配(\w)出現的內容!

          

               該正則只是簡單的匹配兩個字元,注意區別!

           再給個例子: