Php preg_替换为[list][*][/list]

Php preg_替换为[list][*][/list],php,preg-replace,Php,Preg Replace,有人能帮我解决这个问题吗 我正在为我的网站使用BBcode,但在文本编辑器中我发现一个问题: Ul [list] [*]Lorem Ipsum [/list] [list=1] [*]Lorem Ispum [/list] Ol [list] [*]Lorem Ipsum [/list] [list=1] [*]Lorem Ispum [/list] 我正在使用以下脚本: $filter = preg_replace("#[[]list[]](.*)[[]/list[]]#","<

有人能帮我解决这个问题吗

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

Ul

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

[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);

我猜你不再需要它了,但要给出一个答案:

  • 括号是正则表达式中的特殊字符。当你真正指的是一个括号时,你必须用反斜杠来避开它。星星(星号)也是如此
  • 您可以通过
    s
    修饰符分析多行
  • 您将需要
    U
    (ungreedy)修饰符,否则代码中的多个块将无法工作。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);
$filter=preg\u replace(“\[list\](.*)\[/list\]\sU”,“
    $1
”,$filter); $filter=preg\u replace(“\[list=([0-9+])\](.*)\[/list\]\sU”,“$2”,$filter); $filter=preg\u replace(“\\[\*\](.*)”,“
  • $1
  • ”,$filter);
    请仔细阅读。还可以使用
    #s
    修饰符使
    *
    匹配换行符。但是也要考虑搜索一个现成的BBCOD/ALVE转换器,因为你的编码尝试有更多的缺陷。你可能还想看看BBCODE模块: