如何解决Java中带有*的正则表达式分组和replaceAll会重复替换
可能.*
会给您“完全匹配”,然后将匹配减少为“空匹配”(但仍然是匹配)。尝试(.+)
或(^.*$)
代替。两者都按预期工作。
在regexinfo中,星的定义如下:
*(星号)-将上一个项目重复零次或多次。贪婪,因此在尝试进行与前一个项目的匹配较少的置换之前,将匹配尽可能多的项目,直到前一个项目根本不匹配。
解决方法
我在Java中使用Rexexp时遇到问题。示例代码写出了ABC_012_suffix_suffix
,我期望它能输出ABC_012_suffix
Pattern rexexp = Pattern.compile("(.*)");
Matcher matcher = rexexp.matcher("ABC_012");
String result = matcher.replaceAll("$1_suffix");
System.out.println(result);
我知道replaceAll会替换所有匹配的组,问题是为什么此regexp组在Java中的(.*)
字符串上匹配两次ABC_012
?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。