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]
在多行模式下,我预计 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]