PHP BBCode解析器
我有一个很小的bbcode解析器,除了pre和code标签之外,它工作得很好。 我需要使整个解析器函数忽略预编码和代码标记。 我将如何实现这一目标? 如果有人有想法,请告诉我。
我试图做的是当我使用<pre>
或<code>
标签时,它会忽略里面使用的bbcode,但是解析它在页面上的其他地方。 我认为它可以通过正则表达式和preg_match或preg_replace来实现一些方法。
function parse($text) {
$search = array(
'/**(.*?)**/is', // bold
'///(.*?)///is', // italic
'/__(.*?)__/is', // underline
); #search
$replace = array(
'<b>$1</b>',
'<i>$1</i>',
'<u>$1</u>',
); #replace
return preg_replace($search, $replace, $text);
} #parse
<pre>
** Bold Text **
// Italic Text //
__ Uderline Text __
</pre>
<code>
** Bold Text **
// Italic Text //
__ Uderline Text __
</code>
任何帮助将被认可。 谢谢。
首先,那不是BBCode。 BBCode使用[
和]
作为分隔符来模仿常见的HTML标记标签。 那里有什么,类似于Markdown或reStructuredText。
其次,你的替换算法非常简单,将来可能会给你带来很多麻烦。 如果您不仅仅是在学习如何使用PHP进行编码,我建议您使用现有的解析器,这些解析器已经可以做你想做的事情,比如PHP Markdown,PHP reStrucuredText或PHP BBCode Parser。
现在,对于你的实际问题:这并不容易,但你可以从改变你的正则表达式开始,这样它们才适用,如果它们不在这样的<pre>
标签中:(未经测试)
'/(?<!<pre>).*?**(.*?)**.*?(?!</pre>)/is', // bold
链接地址: http://www.djcxy.com/p/29871.html
上一篇: PHP BBCode Parser