<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ##### **條件表達式(?(Expression)yes|no)** 它是 **(?(<span style="color:red">?=</span>Expression)yes|no)** 的簡寫形式,相當于三元運算符 **(?=Expression)?yes:no** 如果“Expression”與可能出現的命名捕獲組的組名相同,為避免混淆,可以采用“(?(?=Expression)yes|no)”方式顯示聲明“Expression”為子表達式,而不是捕獲組名 | 表達式 | 條件特點 | 條件說明 | | --- | --- |--- | | **(?(1)yes\|no)** | 條件為數字 | 分組1如果有捕獲,則進行 yes 部分匹配,否則 no 部分 | | **(?(?=a)yes\|no)** | 條件為預搜索 | 如果當前位置右側是 a,則進行匹配 yes,否則匹配 no | | **(?(xxx)yes\|no)** | 不與分組命名吻合 | 如果不與任何分組命名吻合,則視為 **(?=xxx)** 相同 | | **(?(name)yes\|no)** | 與分組命名吻合 | 如果與某分組命名吻合,則視為判斷該分組是否進行捕獲 | | **(?(xxoo)yes)** | 只有一個條件表達式 | 當只有一個條件時那么yes只能在條件成立下匹配 | | **(?(xxoo)yes\|no1\|no2)** | 條件表達式大于2個 | 以第一個 **\|** 為準 成功匹配yes 不成功匹配no1\|no2 | `(?(?=a)\w{2}|\w)`? ? 當前位置右側如果是字符“a”?,則匹配兩個“\w”,否則匹配一個“\w” ``` $str="a+(b*(c+d))/e+f-(g/(h-i))*j"; $pattern="/\(((?<Open>\()|(?<-Open>\))|[^()]+)*(?(Open)(?!))\)/"; ``` 看著難受 把他分開看容易些 ~~~ $pattern="/ \( #先匹配普通的開括號( ( (?<Open>\() #命名捕獲組,遇到開括弧(則’Open’計數加1 | (?<-Open>\)) #狹義平衡組,遇到閉括弧)則’Open’計數減1 每匹配到一個“)”,就出棧最近入棧的Open捕獲組,$matchs計數減1 | [^()]+ #非括弧的其它任意字符 )* (?(Open)(?!)) #判斷是否還有’Open’,有則說明不配對,什么都不匹配 \) #匹配普通閉括號 /"; ~~~ 后面的(?(Open)(?!))用來保證堆棧中Open捕獲組計數是否為0,也就是“(”和“)”是配對出現的 5. 最后的“)”,作為匹配的結束 需要對“(?!)”進行一下說明,它屬于順序否定環視,完整的語法是“(?!Expression)”。由于這里的“Expression”不存在,表示這里不是一個位置,所以試圖嘗試匹配總是失敗的,作用就是在Open不配對出現時,報告匹配失敗 平衡組用于匹配嵌套層次結構,常用于匹配HTML標簽(當HTML內容不規范,起始標簽和結束標簽數量不同時,匹配出正確配對的標簽),在此把表達式統一以`\w`為例。 * `(?'group'\w)`?捕獲的分組(`\w`匹配到的內容)命名為`group`,并壓入堆棧 * `(?'-group'\w)`?捕獲分組(`\w`匹配到的內容)后,彈出`group`分組棧的棧頂內容(最后壓入的捕獲內容),堆棧本來為空,則本分組的匹配失敗 * `(?(group)yes|no)`?如果`group`棧非空匹配表達式`yes`,否則匹配表達式`no` * `(?!)`?零寬負向先行斷言,由于沒有后綴表達式,試圖匹配總是失敗 ## 平衡組分狹義平衡組與廣義平衡組 ### 狹義平衡組: **(?\<Close-Open\>Expression)** 一般都是省略的,寫作“**(?\<-Open\>Expression)**” 狹義平衡組指.NET中定義的(?Expression) 廣義平衡組并不是固定的語法規則,而是幾種語法規則的綜合運用,我們平時所說的平衡組通常指的是廣義平衡組。本文中如無特殊說明,平衡組這種簡寫指的是廣義平衡組 平衡組通常是由量詞,分支結構,命名捕獲組,狹義平衡組,條件判斷結構組成的,量詞和分支結構這里不做介紹,這里只對命名捕獲組,狹義平衡組和條件判斷結構做下說明 >[danger]注意:php不支持平衡組,我們可以通過遞歸達到同樣的效果
                  <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>

                              哎呀哎呀视频在线观看