Java RegEx 不会替换所有

标签 java regex

我试图用“||”替换连接符号“+”在给定的多行脚本中,然而,java 正则表达式似乎只替换了 1 次出现,而不是全部。

String ss="A+B+C+D";
Matcher mm=Pattern.compile("(?imc)(.+)\\s*\\+\\s*(.+)").matcher(ss);

while(mm.find())
{
    System.out.println(mm.group(1));
    System.out.println(mm.group(2));
    ss=mm.replaceAll("$1 \\|\\| $2");
}

System.out.println(ss); // Output: A+B+C||D, Expected: A||B||C||D

最佳答案

您只替换一个元素的原因是因为您匹配整行。您使用的正则表达式 "(?imc)(.+)\\s*\\+\\s*(.+)",匹配任何内容 (.+) 直到结束,然后恢复,所以它可以匹配其余的 \\s*\\+...。所以基本上你的组 1 是 .+ 几乎所有的东西,但最后一个 + 和以后。因此 replaceAll 只能匹配一次,并会在该次替换后终止。 您需要的是找到 + 可选地包含在空格中的替换:

Pattern.compile("(?imc)\\s*\\+\\s*");

这应该匹配所有你想匹配的,而不是匹配整行,而只是匹配你的替换字符。

关于Java RegEx 不会替换所有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56697557/

相关文章:

Java返回到调用栈中的位置N

java - 如何从 Android 向 .NET 服务器发出 HTTPS Post 请求?

java - 如何使用 MySQL DB 计算一天内出行次数的分布

python - 如何使用 python re 模块在字符串中自动查找类似 'c++' 的模式?

jQuery:如何将文本与正则表达式模式匹配并将结果包装在 anchor 标记中?

java - Hibernate - 表或 View 不存在错误

java - 如何在java中使用系统dsn连接数据库?

regex - 使用 Perl 拆分功能,但保留某些分隔符

javascript - 用于查找重叠的、随机命名的标签的正则表达式——非贪婪反向引用

python - 用于匹配或忽略一组两位数的正则表达式