2

誰でもこの問題を解決できますか?

Web サイトに BBcode を使用していますが、テキスト エディターで次のような問題が見つかりました。

ウル

[list]
[*]Lorem Ipsum
[/list]

オル

[list=1]
[*]Lorem Ispum
[/list]

私はこのスクリプトを使用しています:

$filter = preg_replace("#[[]list[]](.*)[[]/list[]]#","<ul>$1</ul>",$filter);
$filter = preg_replace("#[[]list=([^0-9][]](.*)[[]/list[]]#","<ol start=$1>$2</ul>",$filter);
$filter = preg_replace("#[*](.*)#","<li>$1</li>",$filter);

このスクリプトで問題が発生しました。スクリプトfound symbol after [list]が次のステートメントを実行できないため、使用できません。

preg_replace("#[[]list[]]  (.*)  [[]/list[]]#","<ul>$1</ul>",$filter);    
[list]
[*]   Lorem Ipsum --- Stuck In Long Space 
[/list]
4

1 に答える 1

1

もう必要ないと思いますが、答えを出すために:

  • 角かっこは正規表現の特殊文字です。本当に角かっこを意味する場合は、円記号を使用して角かっこをエスケープする必要があります。星(アスタリスク)もそうです。
  • s修飾子によって複数の行を解析できます
  • (貪欲でない)修飾子が必要になりUます。そうしないと、コード内の複数のブロックが機能しません。ungreedyは、試合の開始と終了が最も近い環境で検索されることを意味し、greedyは、アルゴリズムが最長距離を検索することを意味します。

私が変えたことがあったと思います:

$filter = preg_replace("#\[list\](.*)\[/list\]#sU","<ul>$1</ul>",$filter);
$filter = preg_replace("#\[list=([0-9+])\](.*)\[/list\]#sU","<ol start=\"$1\">$2</ul>",$filter);
$filter = preg_replace("#\[\*\](.*)#","<li>$1</li>",$filter);
于 2013-01-17T19:47:17.250 に答える