当我使用
时,我无法弄清楚如何让我的正则表达式选择多行[b]Test[/b]
我的BB代码工作正常,但是当我尝试
时[b]
Test
[/b]
我已经读过我应该在我的正则表达式中使用修饰符/s /m
但是我不知道如何,我尝试过:preg_match_all('\[(' . $tags . ')=?(.*?)\](.+?)\[/\1\]/m/s
'但它不起作用。
任何建议?
工作示例:
$tags = 'b|i|size|color|center|quote|url|img';
while (preg_match_all('`\[(' . $tags . ')=?(.*?)\](.+?)\[/\1\]`', $string, $matches))
foreach ($matches[0] as $key => $match) {
list($tag, $param, $innertext) = array($matches[1][$key], $matches[2][$key], $matches[3][$key]);
答案 0 :(得分:2)
添加修饰符的语法不正确。首先,您不需要任何斜杠来应用它们。它们只属于分隔符(在您的情况下不是/
而是`
)。而且你也不需要再次划分每一个修饰符,只需将它们粘在一起:
'`\[(' . $tags . ')=?(.*?)\](.+?)\[/\1\]`ms'
您使用哪个分隔符并不重要。查看PHP documentation on delimiters。你可以使用
任何非字母数字,非反斜杠,非空白字符。
请注意必须转义分隔符。因此,`
和/
之间没有区别。如果您使用/
代替,那么您需要在正则表达式中转义/
(否则PHP会假设这是正则表达式的结尾)。像这样:
'/\[(' . $tags . ')=?(.*?)\](.+?)\[\/\1\]/ms'
因此,分隔符的选择主要是为了方便 - 如果可能的话,使用在正则表达式中不会出现的分隔符,因此您不必逃避它。 /
只是最常见的选择,这就是为什么您可能找到了添加修饰符的/m
符号。由于PHP文档状态是常见的选择,#
和~
(我也经常看到!
。