代码
(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]';
我想要什么
无论是什么字符(输入等等),我都希望我的正则表达式能够正常工作。
如果有人能帮我解决这个问题,我会很高兴的。我仍然没有深入研究正则表达式,所以我对它并不那么好:(
答案 0 :(得分:6)
您的正则表达式中只需要 DOTALL 标记/s
。这允许点.
匹配任何字符,包括换行符(默认情况下不会这样做)。
preg_match_all("#\[level-(.+)-\](.+?)\[/level\]#s", ....
另请参阅PCRE标志列表http://php.net/manual/en/reference.pcre.pattern.modifiers.php
答案 1 :(得分:2)
您可能需要通过在模式中添加/ s标志来让regex将其输入视为单行。
答案 2 :(得分:1)
使用s
模式修饰符:
如果设置了此修饰符,则模式中的点元字符将匹配所有字符,包括换行符。没有它,排除了换行符。 (参考:Possible modifiers in regex patterns)
答案 3 :(得分:0)
这应该有效:
(preg_match_all("#\[level-(.+)-\](.+?)(\b)*(.+?)*\[/level\]#", $string, $matches)
答案 4 :(得分:0)
"Test[.|\n]is[.|\n]a[.|\n]test"
这可能有效