匹配换行符,为什么 [.\n]* 在正则表达式中不能起作用?

12

据我了解,在正则表达式中,点符号 . 可以匹配几乎所有字符。那么,如果要匹配包括换行符在内的任何字符,为什么 [.\n]* 不起作用呢?


1
没有关于您使用哪种正则表达式变体的信息,我们无法告诉您为什么您尝试的方法不起作用,或者应该使用什么方法。您已经得到了多个答案,所以现在基本上太晚改变这个问题。接受一个答案,阅读regex标签信息页面,如果需要更多帮助,请按照那里的指导方针提出新问题。另请参见[帮助],也许特别是有关发布[mcve]的说明。 - tripleee
3个回答

13

使用[.\n]*表示一个字符类,它将匹配零个或多个点或换行符。

在字符类之外,有不同的含义。您可以使用修饰符(?s)或在语言或工具选项中指定,使点与换行符匹配。


5
大多数正则表达式方言将 . 定义为除换行符之外的任何字符,这是因为实现通常每次检查一行(例如 grep ),或者因为这对现有工具的兼容性有意义(许多现代编程语言等)。
Perl和许多重新实现或模仿其“现代”正则表达式风格的语言具有DOTALL选项,它可以更改语义,使 . 也匹配换行符。
如果您没有该选项,请尝试(.| \n)* ,但这仍然非常取决于您使用的正则表达式工具; 它可能不会识别转义代码 \ n 表示换行符。

3

你应该使用

.*\n    -- this one if line can be empty

或者

.+\n    -- this one if line must include at least 1 character other that new line

同时,您需要记住有时换行符的格式可能是\r\n(主要用于Windows系统)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接