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

Yua*_*Shi 7 regex

从我的理解来看。匹配正则表达式中的几乎所有字符。那么如果我想匹配任何字符,包括新行,为什么 [.\n]* 不起作用?

The*_*ird 10

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

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

  • @tripleee 我正在阅读这篇文章,因为 OP 尝试了 `[.\n]*` 但没有奏效。OP 表示很明显点与换行符不匹配。我的答案是点在字符类中,并且只会匹配字面上的点或换行符。 (2认同)

tri*_*eee 5

大多数正则表达式方言定义为除换行符之外的.任何字符,要么是因为实现通常一次检查一行(例如),要么因为这对于与现有工具(许多现代编程语言等)的兼容性有意义。grep

Perl 和许多重新实现或模仿其“现代”正则表达式风格的语言都有一个选项 DOTALL,它可以更改语义,以便.也匹配换行符。

如果您没有该选项,请尝试(.|\n)*,但这仍然在很大程度上取决于您使用的正则表达式工具;\n它也可能无法识别换行符的转义码。


m.a*_*icz 3

你应该使用

.*\n    -- this one if line can be empty
Run Code Online (Sandbox Code Playgroud)

或者

.+\n    -- this one if line must include at least 1 character other that new line
Run Code Online (Sandbox Code Playgroud)

你还应该记住,有时换行符的格式可以是\r\n(主要是Windows)