0

基本的にこの方法で呼び出される 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
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 に答える