投稿された無数の質問から、ネストされたステートメントを置き換えるためにregexを使用することは可能ではないことがわかっています。一意のネストされたステートメントを正規表現または代替のものに置き換える
それは文がユニークである場合には何の違いを行う場合、私は思ったんだけど:
[if @test]TEST[if @second]SECOND[/if][/if]
エンドブロックもユニークであるとき、私は不器用な回避策です知っている、それがうまく得ている:
[if @test]TEST[if @second]SECOND[/if @second][/if @test]
$pattern = '%\[if @'.$dynamic.'.*?\](.*?)\[/if @'.$dynamic.'\]%s'; //Works with above
エンドブロックを一意にすることなくregexを使用することはできますか?これを達成する正規表現の代替手段がありますか?
[if @test] TEST [if @second] SECOND [/ if] [/ if]のような任意のネストレベルを解析したいと思います。正規表現が実用的でない場合、誰でもPHPで実行可能な代替案を提案できますか?
それはあなたが達成しようとしているされて何を:あなたは正規表現を求めたので
は、ここ1は、このようなネストされた
if
Sを一致させるのですか?希望の出力をサンプル入力してください。 – Madbreaks私は質問を編集しますが、目的はユニークなエンドブロックを必要とせずにregexを使って置換を行うことです。 – jsuissa
問題は実際には*ネスト*ではなく、*任意の*ネストであります。たとえば、大括弧がちょうど4つの深さにネストされていることが分かっているなら、 'a [b [c [d [e] f] g] h] iのさまざまな部分を解析するための正規表現を簡単に書くことができます。大括弧の中には、その中にちょうどネストされた1つのセットがあります。同じ正規表現が 'a [b [c] d [e [f [g] h [i [j [k]] [n] o] p] q] r] s [ t] u] v] w'の場合、真の正規表現ではできません.POSはこれを可能にする拡張の種類をサポートしていません。 – ruakh