我正在编写使用Matcher#replaceAll
并发现以下结果非常令人困惑的代码:
Pattern.compile("(.*)").matcher("sample").replaceAll("$1abc");
现在,我希望输出是sampleabc
但是 Java 会向我抛出sampleabcabc
。
有人知道为什么吗?
现在,当然,当我锚定模式 ( ^(.*)$
) 时,问题就消失了。我仍然不知道为什么地狱会replaceAll
做这样的双重替换。
并且雪上加霜,下面的代码:
Pattern.compile("(.*)").matcher("sample").replaceFirst("$1abc")
按预期工作,仅返回sampleabc
.