Dot与新线不匹配?

时间:2010-08-21 13:46:29

标签: php regex

当我在其中编写带.的正则表达式时,它与新行不匹配。

preg_match('/.*+?/') ...

我需要编写什么,以匹配所有可能的字符和新行?

5 个答案:

答案 0 :(得分:22)

添加s modifier,例如

'/./s'

答案 1 :(得分:2)

默认情况下,.与新行不匹配。您可以使用s修饰符更改此行为。

答案 2 :(得分:1)

.与新行不匹配 - 这是故意的(尽管我不确定为什么)。您可以使用s修饰符更改此行为,并使.匹配所有字符,包括换行符。

示例:

$text = "Foobar\n123"; // This is the text to match

preg_match('/^Foo.*\d+$/', $text); // This is not a match; the s flag isn't used
preg_match('/^Foo.*\d+$/s', $text); // This is a match, since the s flag is used

答案 3 :(得分:0)

除了s修饰符,你应该考虑使用否定的字符类。而不是

 #http://example\.org/.+/.+/.+#

你可以使用

 #http://example\.org/[^/]+/[^/]+/[^/]+#

应该更快。

答案 4 :(得分:-1)

试试这个:

   \r : carriage return
   \n : new line 
   \w : even [a-zA-Z0-9_] 
   *  : 0 or more. even :  +?
   $text = "a\nb\n123"; 
   preg_match("/[\w\r\n]*/i", $text, $match);
   print_r($match);

请参阅此列表:

http://i26.tinypic.com/24mxgt4.png