基本的にこの方法で呼び出される bbcode パーサーを作成しました。
echo nl2br(bb_parse($contents));
e 修飾子付きの preg_replace の代わりに preg_replace_callback を使用して、関数を 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] の間に 3 つの改行があることです。改行を削除しないと、出力は次のようになります。
1. One
2. Two
それ以外の:
1. One
2. Two