PHP と正規表現に関してはまったく無知ですが、フォーラムの壊れたプラグインを修正しようとしています。
以下を交換したいと思います。
<blockquote rel="blah">foo</blockquote>
と
<blockquote class="a"><div class="b">blah</div><div class="c"><p>foo</p></div></blockquote>
実際、その部分は簡単で、これを行うためにプラグインを部分的に修正しました。次の正規表現はpreg_replace_callback()
、置換を行うための呼び出しで使用されています。
/(<blockquote rel="([\d\w_ ]{3,30})">)(.*)(<\/blockquote>)/u
コールバック コードは次のとおりです。
return <<<BLOCKQUOTE
<blockquote class="a"><div class="b">{$Matches[2]}</div><div class="c"><p>{$Matches[3]}</p></div></blockquote>
BLOCKQUOTE;
そして、それは上記の例(ネストされていないブロック引用)で機能します。ただし、次の例のようにブロック引用符がネストされている場合:
<blockquote rel="blah">foo <blockquote rel="bloop">bar ...maybe another nest...</blockquote></blockquote>
うまくいきません。私の質問は、正規表現/PHP の組み合わせを使用して、ネストされたすべての引用符を置き換えるにはどうすればよいですか? PHPで再帰パターンが可能であることは知ってい(?R)
ます; 次の正規表現は、ネストされたすべての引用符を含む文字列からそれらを抽出します。
/(<blockquote rel="([\d\w_ ]{3,30})">)(.*|(?R))(<\/blockquote>)/s
preg_replace_callback()
しかし、そこから先は、ネストされた各ブロック引用を上記の置換で置き換えるためにコールバックで何をすべきかよくわかりません。
どんな助けでも大歓迎です。