我写了一个基本上用这种方式调用的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
答案 0 :(得分: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;
}