PHP正则表达式与preg_match_all - 为什么不匹配?

时间:2012-11-11 23:36:46

标签: php regex-greedy

我正在查看正则表达式以匹配任何字符。我知道'。'是除了换行符之外的占位符。鉴于以下代码:

$fruits = "One\nTwo\nThree";
preg_match_all('/^(.*)$/', $str, $matches);
print_r($matches);

为什么它根本不匹配?我想,$ matches [0]会是One Two Three吗?

1 个答案:

答案 0 :(得分:2)

添加modifier "s" to the regex

  

如果设置了此修改器,则模式中的点元字符匹配   所有字符,包括换行符。没有它,排除了换行符。   此修饰符等效于Perl的/ s修饰符。负面的一类   例如[^ a]始终匹配换行符,独立于换行符   设置此修饰符。

$fruits = "One\nTwo\nThree";
preg_match_all('/^(.*)$/s', $fruits, $matches);
print_r($matches);

<强>更新

如果您将$ fruits括在单引号中,则换行符不会被视为替换,并且替换也可以,没有“s”修饰符的事件。但我不知道输出是否符合您的预期;)

   $fruits = 'One\nTwo\nThree';
   preg_match_all('/^(.*)$/', $fruits, $matches);
   print_r($matches);