Точка не соответствует новым строкам? - PullRequest
6 голосов
/ 21 августа 2010

Когда я пишу регулярное выражение с ., оно не соответствует новым строкам.

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

Что мне нужно написать, чтобы соответствовать всем возможным символам, а также новым строкам?

Ответы [ 5 ]

22 голосов
/ 21 августа 2010

Добавьте модификатор s , например,

'/./s'
2 голосов
/ 21 августа 2010

По умолчанию . не будет соответствовать символам новой строки. Вы можете изменить это поведение с помощью модификатора s.

1 голос
/ 21 августа 2010

. не соответствует новым строкам - и это специально (хотя я не совсем уверен, почему). Чтобы изменить это поведение, вы должны использовать модификатор 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
0 голосов
/ 21 августа 2010

Попробуйте это:

   \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

0 голосов
/ 21 августа 2010

Помимо модификатора s вы должны подумать об использовании отрицательного класса символов. Вместо

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

вы можете использовать

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

что должно быть быстрее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...