我有这个正则表达式,取自 PHP.net 以捕获 [code][/code] 标签。
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] 部分,但在某处,某些东西正在把它弄乱,我无法弄清楚。