问题描述
可能.*
会给您“完全匹配”,然后将匹配减少为“空匹配”(但仍然是匹配)。尝试(.+)
或(^.*$)
代替。两者都按预期工作。
在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
?