2012-09-15 61 views
2

任何人都可以帮我解决这个问题吗?preg_replace for [list] [*] [/ list]

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

的UI

[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] 
+0

请在[字符类]读了(http://www.regular-expressions.info/charclass.html)。还可以使用'#s'修饰符来使'。*'匹配换行符。但也考虑搜索现成的bbcode /无论转换器,因为你的编码尝试有更多的缺陷。 – mario

+0

您可能还想看看BBCode模块:http://php.net/manual/en/book.bbcode.php –

回答

1

猜你不需要它了,而是让回答:

  • 括号是正则表达式中的特殊字符。当你确实需要一个括号时,你必须使用反斜杠来转义它。星星(星号)也是如此。
  • 您可以通过s修改器分析多行
  • 您将需要U(不确定)修饰符,否则代码中的多个块将不起作用。不合理的意思是,匹配的开始和结束将在最近的环境中寻找,贪婪意味着代理将搜索最长的距离。

我想有我改变的东西:

$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); 
相关问题