Java';s多行正则表达式行为
在多行模式下,我希望使用JavaJava';s多行正则表达式行为,java,regex,multiline,Java,Regex,Multiline,在多行模式下,我希望使用Java "BEGIN\n\n END".replaceAll("(?m)^\\s+|\\s+$", "") 导致 "BEGIN\n\nEND" 但结果却是 "BEGINEND" 请问我遗漏了什么?多行不会更改\n的解释,因为\s匹配所有空白字符,包括换行符 您可以使用\h(水平空白)而不是\s使其工作(从Java 8开始提供): 如果您使用的是较旧的Java版本,请使用此选项,而不是\h:(感谢@ctwheels) \s包括\n。您可以使用[^\S\n]而不是
"BEGIN\n\n END".replaceAll("(?m)^\\s+|\\s+$", "")
导致
"BEGIN\n\nEND"
但结果却是
"BEGINEND"
请问我遗漏了什么?
多行
不会更改\n
的解释,因为\s
匹配所有空白字符,包括换行符
您可以使用\h
(水平空白)而不是\s
使其工作(从Java 8开始提供):
如果您使用的是较旧的Java版本,请使用此选项,而不是
\h
:(感谢@ctwheels)
\s
包括\n
。您可以使用[^\S\n]
而不是\S
字符类\h
是posix字符类的速记等价物[:blank:
。在java中,空白字符类可以被指定为<代码> \p{BLUL}} /代码>。这是对旧版本Java的更精确的替代。
String repl = "BEGIN\n\n END".replaceAll("(?m)^\\h+|\\h+$", "");
[^\S\n]