0

代码


(preg_match_all("#\[level-(.+)-\](.+?)\[/level\]#", $string, $matches)

问题


如果我用 enter 分配任何值$string,我的正则表达式就不起作用。

例子:

//This doesn't work
$string = '[level-0-]This is a 
test[/level]';
//This works
$string = '[level-0-]This is a test[/level]';

我想要的是


无论(输入等)之间的字符是什么,我都希望我的正则表达式能够工作。

如果有人能帮我解决这个问题,我会很高兴。我还没有深入研究正则表达式,所以我对它不太擅长:(

4

5 回答 5

6

您只需要正则表达式中的DOTALL标志/s。这允许点.匹配任何字符,包括换行符(默认情况下不这样做)。

preg_match_all("#\[level-(.+)-\](.+?)\[/level\]#s", ....

另请参阅 PCRE 标志列表http://php.net/manual/en/reference.pcre.pattern.modifiers.php

于 2011-09-28T11:44:03.330 回答
2

您可能需要通过将 /s 标志添加到您的模式来让正则表达式将其输入视为单行。

于 2011-09-28T11:44:32.987 回答
1

使用s模式修饰符:

如果设置了此修饰符,则模式中的点元字符匹配所有字符,包括换行符。没有它,换行符被排除在外。(参考:正则表达式模式中可能的修饰符

于 2011-09-28T11:48:04.443 回答
0

这应该工作:

(preg_match_all("#\[level-(.+)-\](.+?)(\b)*(.+?)*\[/level\]#", $string, $matches)
于 2011-09-28T11:45:24.407 回答
0

"Test[.|\n]is[.|\n]a[.|\n]test"这可能有效

于 2011-09-28T11:49:05.777 回答