任何字符,包括换行符-Java正则表达式

任何字符,包括换行符-Java正则表达式,java,regex,Java,Regex,我想它可能是[.\n]+但似乎不起作用?点不能在字符类中使用 请参见选项 Pattern.DOTALL启用DOTALL模式。在dotall模式下,表达式匹配任何字符,包括行终止符。默认情况下,此表达式与行终止符不匹配。也可以通过嵌入式标志表达式(?s)启用Dotall模式。(s是“单行”模式的助记符,在Perl中就是这样称呼的。) 如果您只需要在正则表达式的一部分上使用它,您可以使用例如[\s\s]编辑:虽然我的原始答案在技术上是正确的,正如ThorCaller所指出的,但这样做可以更有效 [\

我想它可能是[.\n]+但似乎不起作用?

点不能在字符类中使用

请参见选项

Pattern.DOTALL
启用DOTALL模式。在dotall模式下,表达式
匹配任何字符,包括行终止符。默认情况下,此表达式与行终止符不匹配。也可以通过嵌入式标志表达式
(?s)
启用Dotall模式。(s是“单行”模式的助记符,在Perl中就是这样称呼的。)


如果您只需要在正则表达式的一部分上使用它,您可以使用例如
[\s\s]
编辑:虽然我的原始答案在技术上是正确的,正如ThorCaller所指出的,但这样做可以更有效

[\s\s]
(.|\n)
(.|\n |\r)

相比,试试这个

((.|\n)*)

它匹配所有字符多次

可能比
[\s\s]
将是
(?:.|\n)
更干净。
[。\n]
不起作用的原因是
在字符类中并不特殊;使用文本或(
|
)指定相同的内容很好。@Antal我不认为
(?:.|\n)
是可移植的,因为Windows中的新行是
\r\n
。可能是
(?:.|\n |\r)
,不过现在
\r
在Unix中是多余的。很好。我认为通常的解决方案是
\r?\n
。在Java中,只需执行
(?s:
即可为特定部分启用DOTALL模式,并且不再担心愚蠢的OSs。当然,也可以使用
(?s)
(?-s)在这些点将其打开然后关闭。这似乎非常昂贵,
[\s\s]
在regex引擎上似乎友好得多。