[code][/code] タグをキャプチャするために PHP.net から取得したこの正規表現があります。
function code_highlight($code)
{
return $code = preg_replace_callback('#\[code]((?:[^[]|\[(?!/?code])|(?R))+)\[/code]#', 'code_highlight_callback', $code);
}
私のコールバック関数は次のとおりです。
function code_highlight_callback($matches)
{
return "<pre class='highlighted_code'>" . $matches[0] . "</pre>";
}
行を返す代わりにエコーすると、htmlentities()
次の行に沿って何かが得られます。
<pre class='highlighted_code'>
[code]int main()</div>
<div>{</div>
<div>}</div>
<div>[/code]
</pre>
正規表現に関する限り、すべて問題ないようです。ただし、戻り値を出力すると、ソース コードは次のようになります。
<div>
<div>
<pre class="highlighted_code">[code]int main()</pre>
</div>
<div>{</div>
<div>}</div>
<div>[/code] </div>
</div>
PRE タグが移動して短くなるのはなぜですか? 正規表現は、文字列の [code] [/code] セクション全体を明確にキャプチャしていますが、どこかで何かが混乱していて、私には理解できません。