2

谁能帮我解决这个问题?

我正在为我的网站使用 BBcode,但在文本编辑器中我发现了一个问题:

UL

[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) 修饰符,否则代码中的多个块将不起作用。不贪心意味着,将在最近的环境中寻找匹配的开始和结束,贪心意味着算法将搜索最长的距离。

我认为我改变了一些事情:

$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 回答