我开发了一个类,允许我控制许多BBCode标签和其他特殊格式,并且运行良好。我遇到的问题是内部标签与外部标签相同。例如,另一个[quote] [/ quote]中的[quote] [/ quote]就像这样:
[quote=Foo]Here is a quote:
[quote=Bar]Test[/quote]
Did that work?[/quote]
问题是正则表达式在找到外部开始[quote]的匹配时找到内端[/ quote]。
我是否必须逐行拆分才能找到合适的匹配或是否有一种优雅的方法?
这是对我如何做的一个小测试(有一点但功能上这就是它正在做的事情):
$desc = '[quote=Foo]Here is a quote:
[quote=Bar]Test[/quote]
Did that work?[/quote]';
$args = array(
'tid' => 1234
);
preg_match('`\[(quote)=?(.*?)\]((\r\n|\r|\n|.)+?)\[\/quote\]`i', $desc, $matches);
list($str, $tag, $match, $innertext) = $matches;
$params = explode(';', $match);
$name = array_shift($params);
$replacement = '<div class="quote">' . $name . '<span class="quote-text">' . $innertext . '</span></div>';
$string = str_replace($str, $replacement, $desc);
其他标签在嵌套在其他标签中时很好,只是类似的标签找不到匹配。
答案 0 :(得分:1)
尝试使用贪婪量词,并启用s
dotall 修饰符。
preg_match('~\[(quote)=?(.*?)\](.+)\[/quote\]~is', $desc, $matches)