0

我写了一个 bbcode 解析器,基本上是这样调用的:

echo nl2br(bb_parse($contents));

我正在通过使用 preg_replace_callback 而不是带有 e 修饰符的 preg_replace 来更新函数,以便为 PHP 5.4+ 做好准备。

function strip_newline($text) 
{ 
     return preg_replace("/(\r\n|\r|\n)/", "", $text); 
}

bb_parse($text)
{
    $text = preg_replace("/\[ul\](.*)\[\/ul\]/Usie", '"<ul class=\"forum_unordered\">".strip_newline("$1")."</ul>"', $text);
    return $text;
}

我在使用 preg_replace_callback 来完成同样的事情时遇到了麻烦。

bb_parse($text)
{
    $text = preg_replace_callback("/\[ol\](.*)\[\/ol\]/Usi", create_function('$matches', 'return preg_replace("/(\r\n|\r|\n)/", "", $matches);'), $text);
    return $text;
}

任何帮助将不胜感激。谢谢你。

编辑

我希望解析的 bbcode 代码是这样的:

[ol]
[li]One[/li]
[li]Two[/li]
[/ol]

我的问题是我希望删除 [ol] 和 [/ol] 之间的三个换行符。在不删除换行符的情况下,输出变为:

1. One

2. Two

代替:

1. One
2. Two
4

1 回答 1

0

我认为问题在这里必须放$matches[1]

bb_parse($text)
{
  $text = preg_replace_callback("/\[ol\](.*)\[\/ol\]/Usi", function($matches){       
    return preg_replace("/(\r\n|\r|\n)/", "", $matches[1]);
   }, $text);
   return $text;
}
于 2013-02-04T18:50:53.583 回答