Java 的多行正则表达式行为

标签 java regex multiline

在多行模式下,我期望 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 的多行正则表达式行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48627933/

相关文章:

java - 将项目编译为 Java 1.3 与 1.8 - 有什么缺点吗?

java - sheet.getLastRowNum() 给出不同的值

javascript - 使用字母、数字和一些特殊字符进行文本框验证的正则表达式

Python findall 正则表达式不起作用

html - 当文本对于列表来说太宽时,多行列表项

wpf - WPF 文本框的多行

java - TCP android 服务器没有收到来自 Java TCP 客户端的第一条消息

java - 最大堆找到第 k 个最小元素

Python字符串正则表达式联合返回一堆空字符串

javascript - 使用 d3js 绘制简单的多线图