正则表达式匹配任何字符,包括换行符
Posted
技术标签:
【中文标题】正则表达式匹配任何字符,包括换行符【英文标题】:Regex to match any character including new lines 【发布时间】:2012-01-08 08:43:17 【问题描述】:是否有正则表达式来匹配“包括换行符在内的所有字符”?
例如,在下面的正则表达式中,$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;
【问题讨论】:
您可能想了解正则表达式修饰符/标志,例如:m,s (m/regex/ims...) 【参考方案1】:如果您不想添加 /s
正则表达式修饰符(也许您仍然希望 .
在正则表达式的其他地方保留其原始含义),您也可以使用字符类。一种可能性:
[\S\s]
不是空格或空格的字符。换句话说,任何字符。
您还可以在正则表达式的一小部分本地更改修饰符,如下所示:
(?s:.)
【讨论】:
+1 我正准备自己使用(?s:.)
语法。
除了不那么优雅之外,(?:.|\n)
是否逊色?
([\S\s]+)
是我想要的。谢谢。 +1
@VlastimilOvčáčík 如果你将它与*
或+
一起使用,那么它对于运行时可能真的很糟糕,因为它可以通过 2^n 种不同的方式匹配任何长度为 n 的字符串。跨度>
【参考方案2】:
将s
modifier 添加到您的正则表达式以使.
匹配换行符:
$string =~ /(START)(.+?)(END)/s;
【讨论】:
在 javascript 中:(START)[\s\S]*(END) - 参见 www.regexpal.com 进行测试 有关@Zymotik 评论的更多信息,请参阅:***.com/questions/1068280/… 在 Java 中,您可以在正则表达式的开头使用内联修饰符 (?s),例如在“yourPattern”之后替换任何字符,包括换行符,使用"(?s)yourPattern.*"
- 另请参阅:rexegg.com/regex-modifiers.html#dotall
在 Ruby 中,修饰符是 m
,而不是 s
。见:rubular.com
JavaScript 现在支持这种方式。 ES2018 添加了 s
dotAll 标志。【参考方案3】:
是的,你只需要让.
匹配换行符:
$string =~ /(START)(.+?)(END)/s;
【讨论】:
【参考方案4】:您想使用“多行”。
$string =~ /(START)(.+?)(END)/m;
【讨论】:
不,m
影响 ^
和 $
锚点,但不影响 .
。
很有趣,谢谢。猜猜我从来没有尝试过完全按照 OP 的要求去做。以上是关于正则表达式匹配任何字符,包括换行符的主要内容,如果未能解决你的问题,请参考以下文章