<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                **分組()** 匿名分組:`(partten)` 上面說過重復一個字符0次、一次或多次,那么如何重復多個字符呢,就是我們要說的分組,例如要匹配一段IP地址(簡單的IP匹配):(/d{1,3}/.){3}/d{1,3}.其中()括起來的部分重復3次。 分組時指定組名: ``` (?<group>parttern) (?'groupname'parttern) (?P<groupname>parttern) ``` 例子: ``` $subject="AAABBCCAAAADDE666FF"; $pattern="/(\w)/"; //匿名分組 $pattern="/(?<name>\w)/"; $pattern="/(?P<name>\w)/"; $pattern="/(?'name'\w)/"; //只能單引號 $a=preg_match_all($pattern, $subject, $matches, PREG_OFFSET_CAPTURE); dump($matches); ``` ``` $subject=" PDO::ATTR_TIMEOUT(integer) 設置連接數據庫的超時秒數。 PDO::ATTR_ERRMODE(integer) 關于此屬性的更多信息請參見 錯誤及錯誤處理 部分。"; $pattern="/(?P<pdo>PDO)::(?P<pro>[^)(]+)+\((?P<type>[^)(]+)+\)\s+(?P<desc>[^\r\n]+)/"; preg_match_all($pattern,$subject ,$matches); ``` **組名的反向引用** 表達式在匹配時,表達式引擎會將小括號 "( )" 包含的表達式所匹配到的字符串記錄下來。在獲取匹配結果的時候,小括號包含的表達式所匹配到的字符串可以單獨獲取引用方法是 "\\" 加上一個數字。"\\1" 引用第1對括號內匹配到的字符串,"\\2" 引用第2對括號內匹配到的字符串……以此類推,如果一對括號內包含另一對括號,則外層的括號先排序號。換句話說,哪一對的左括號 "(" 在前,那這一對就先排序號 <table border="1" cellspacing="0" cellpadding="6"> <tbody> <tr><th> <p>反向引用</p> </th><th> <p>說明</p> </th></tr> <tr> <td> <p><strong>\n</strong></p> </td> <td> <p>對指定數字編號的分組進行反向引用</p> </td> </tr> <tr> <td> <p><strong>\g&lt;name&gt;</strong></p> </td> <td rowspan="3"> <p>對指定名字的命名分組進行反向引用</p> </td> </tr> <tr> <td> <p><strong>\k&lt;name&gt;</strong></p> </td> </tr> <tr> <td> <p><strong>\k'name'</strong></p> </td> </tr> </tbody> </table> ## 從一個簡單例子說起 ``` $subject="abcdebbcde"; $pattern="/([ab])\\1/";? //? 注意php的\\1前還需要加個\轉義"\" 等同 $pattern="/([ab])([ab])/"; ``` 對于正則表達式“**(\[ab\])\\1**”,捕獲組中的子表達式“**\[ab\]**”雖然可以匹配“**a**”或者“**b**”,但是捕獲組一旦匹配成功,反向引用的內容也就確定了。如果捕獲組匹配到“**a**”,那么反向引用也就只能匹配“**a**”,同理,如果捕獲組匹配到的是“**b**”,那么反向引用也就只能匹配“**b**”。由于后面反向引用“**\\1**”的限制,要求必須是兩個相同的字符,在這里也就是“**aa**”或者“**bb**”才能匹配成功。 考察一下這個正則表達式的匹配過程,在位置0處,由“**(\[ab\])**”匹配“**a**”成功,將捕獲的內容保存在編號為1的組中,然后把控制權交給“**\\1**”,由于此時捕獲組已記錄了捕獲內容為“**a**”,“**\\1**”也就確定只有匹配到“**a**”才能匹配成功,這里顯然不滿足,“**\\1**”匹配失敗,由于沒有可供回溯的狀態,整個表達式在位置0處匹配失敗。 正則引擎向前傳動,在位置5之前,“**(\[ab\])**”一直匹配失敗。傳動到位置5處時,,“**(\[ab\])**”匹配到“**b**”,匹配成功,將捕獲的內容保存在編號為1的組中,然后把控制權交給“**\\1**”,由于此時捕獲組已記錄了捕獲內容為“**b**”,“**\\1**”也就確定只有匹配到“**b**”才能匹配成功,滿足條件,“**\\1**”匹配成功,整個表達式匹配成功,匹配結果為“**bb**”,匹配開始位置為5,結束位置為7。 擴展一下,正則表達式“**(\[a-z\])\\1{2}**”也就表達連續三個相同的小寫字母。 ~~~ $subject="abc 123abcd"; $pattern="/(abc)(\s)(\d)+?\\1/";//\1就是第一個()組匹配到的內容 注意需要將\轉義下 $a=preg_match_all($pattern, $subject, $matches, PREG_OFFSET_CAPTURE); var_export($matches);//匹配到abc 123abc ~~~ ?更多反向引用實例 ~~~ $subject="AAABBCCAAAADDE666FF"; $pattern="/(\w)/"; $a=preg_match_all($pattern, $subject, $matches, PREG_OFFSET_CAPTURE); var_export($matches); //['A','A','A','B','B','C','C','A','A','A','A','D','D','E','6','6','6','F','F'; $pattern="/(\w)\\1/"; //array ( 'AA', 'BB', 'CC','AA', 'AA', 'DD', '66','FF',) $pattern="/(\w)\\1*/"; //[ 'AAA', 'BB', 'CC', 'AAAA', 'DD', 'E', '666', 'FF' ] $pattern="/(\w)+/"; //[ 'AAA', 'BB', 'CC', 'AAAA', 'DD', '666', 'FF' ] $pattern="/(\w)(\d)/"; //[ 'E6', '66' ] $pattern="/(\w)(\d)\\1/"; //array ( '666') $pattern="/(\w)(\d)\\1*/"; //[ 'E6', '66' ] $pattern="/(\w)(\d)\\1+/"; //[ '666' ] $pattern="/(\w)(\d)\\1\\2*/"; //[ 'E666' ] $pattern="/(\w)(\d)\\1\\2+/"; //[ 'E666' ] ~~~ ~~~ $subject="aaa bbbb ffffff 999999999"; $pattern="/(\w)((?=\\1\\1\\1)(\\1))+/"; $a=preg_match_all($pattern, $subject, $matches); var_export($matches); # [ 'bb', 'ffff', '9999999'] # (?=exp)非獲取匹配的正向肯定預查 匹配\1\1\1左邊的\w 而\1 又是第一個\w \1\1\1可知至少三個相同的\w字符 后面的(\\1)+可知至少一個 # (\w)((?=\\1\\1\\1) 三個相同的\w字左邊還有一個相同的\為字符 即符四個相同的\w字符 # ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看