Регулярное выражение для соответствия любому символу, включая новые строки - PullRequest
183 голосов
/ 29 ноября 2011

Существует ли регулярное выражение для соответствия "всем символам, включая переводы строки"?

Например, в приведенном ниже регулярном выражении нет вывода из $2, поскольку (.+?) не включает новые строки при сопоставлении.

$string = "START Curabitur mollis, dolor ut rutrum consequat, arcu nisl ultrices diam, adipiscing aliquam ipsum metus id velit. Aenean vestibulum gravida felis, quis bibendum nisl euismod ut. 

Nunc at orci sed quam pharetra congue. Nulla a justo vitae diam eleifend dictum. Maecenas egestas ipsum elementum dui sollicitudin tempus. Donec bibendum cursus nisi, vitae convallis ante ornare a. Curabitur libero lorem, semper sit amet cursus at, cursus id purus. Cras varius metus eu diam vulputate vel elementum mauris tempor. 

Morbi tristique interdum libero, eu pulvinar elit fringilla vel. Curabitur fringilla bibendum urna, ullamcorper placerat quam fermentum id. Nunc aliquam, nunc sit amet bibendum lacinia, magna massa auctor enim, nec dictum sapien eros in arcu. 

Pellentesque viverra ullamcorper lectus, a facilisis ipsum tempus et. Nulla mi enim, interdum at imperdiet eget, bibendum nec END";

$string =~ /(START)(.+?)(END)/;

print $2;

Ответы [ 4 ]

278 голосов
/ 29 ноября 2011

Если вы не хотите добавлять модификатор /s для регулярных выражений (возможно, вы все еще хотите, чтобы . сохранил свое первоначальное значение в других местах регулярного выражения), вы также можете использовать класс символов.Одна возможность:

[\S\s]

символ, который не является пробелом или пробелом ... другими словами, любой символ.

Вы также можете локально изменять модификаторы в небольшой части регулярного выражениявот так:

(?s:.)
161 голосов
/ 29 ноября 2011

Добавьте модификатор s к своему регулярному выражению, чтобы . соответствовал символам новой строки:

$string =~ /(START)(.+?)(END)/s;
7 голосов
/ 29 ноября 2011

Да, вам просто нужно сделать . совпадение с новой строкой:

$string =~ /(START)(.+?)(END)/s;
0 голосов
/ 29 ноября 2011

Вы хотите использовать «многострочный».

$string =~ /(START)(.+?)(END)/m;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...