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

下一篇: replace help needed for BBCode