PHP Regex并输入问题

时间:2011-09-28 11:39:02

标签: php regex enter

代码


(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]';

我想要什么


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

如果有人能帮我解决这个问题,我会很高兴的。我仍然没有深入研究正则表达式,所以我对它并不那么好:(

5 个答案:

答案 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"这可能有效