正则表达式以匹配任何字符,包括换行符


222

是否有正则表达式匹配“包括换行符在内的所有字符”?

例如,在下面的正则表达式中,$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;

1
您可能需要阅读有关正则表达式修饰符/标志的信息,例如:m,s(m / regex / ims ...)
snoofkin 2011年

Answers:


194

s修饰符添加到正则表达式中以使.换行符匹配:

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

32
使用JavaScript:(START)[\ s \ S] *(END)-请访问www.regexpal.com进行测试
Zymotik 2014年

1
有关@ Zymotik的评论更多信息,请参见:stackoverflow.com/questions/1068280/...
雅各布面包车林根

2
在Java中,您可以在正则表达式的开头使用内联修饰符(?s),例如,在使用“ yourPattern”后替换包括换行符在内的任何字符"(?s)yourPattern.*"-另请参见:rexegg.com/regex-modifiers.html#dotall
LukeSolar

在Ruby中,修饰符是m,不是s。参见:rubular.com
乔恩·施耐德

312

如果您不想添加/sregex修饰符(也许您仍想.在regex中的其他地方保留其原始含义),则也可以使用字符类。一种可能性:

[\S\s]

不是空格或空格的字符。换句话说,任何字符。

您还可以在正则表达式的一小部分中本地更改修饰符,如下所示:

(?s:.)

2
+1我本人正准备使用(?s:.)语法。
BoltClock

(?:.|\n)除了不那么优雅之外,其他方面是否逊色?
VlastimilOvčáčík16年

([\S\s]+)是我一直在寻找的东西。谢谢。+1
瑞安

@VlastimilOvčáčík如果将它与*或一起使用,则可能对运行时确实不利,+因为有2 ^ n种不同的方式可以匹配长度为n的任何给定字符串。
Radon Rosborough


-5

您要使用“多行”。

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

6
不,m会影响^$锚点,但不会影响.
BoltClock

有趣,谢谢。猜猜我从未尝试完全按照OP的要求进行操作。
nadime
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.