Java 的多行正则表达式行为

Java's multiline regex behavior

在多行模式下,我预计 Java

"BEGIN\n\n  END".replaceAll("(?m)^\s+|\s+$", "")

导致

"BEGIN\n\nEND"

但结果是

"BEGINEND"

请问我错过了什么?

MULTILINE 不会改变 \n 的解释,因为 \s 匹配所有空白字符,包括换行符。

您可以使用 \h(水平空格)代替 \s 使其工作(从 Java 8 起可用):

String repl = "BEGIN\n\n  END".replaceAll("(?m)^\h+|\h+$", "");

如果您使用的是较早的 Java 版本,请使用它代替 \h:(感谢 @ctwheels)

[^\S\n]