今天早些时候,我很惊讶地发现matcher.replaceAll("$2")
有效,而matcher.replaceAll(matcher.group(2))
不有效(as intended)。
我认为两者都指的是同一件事:字符串与一对捕获括号相匹配。
显然,我找不到足够详细的文档存在细微差别。
我发现this excellent intro/tutorial指的是两者,但它没有深入研究细微差别。
我在哪里可以找到更多相关信息?
答案 0 :(得分:1)
来自Matcher.replaceAll的API文档:
此方法首先重置此匹配器。然后它扫描输入 序列寻找模式的匹配。不是的字符 任何匹配的一部分都直接附加到结果字符串;每 匹配由替换字符串替换为结果。该 替换字符串可能包含对捕获的子序列的引用 在appendReplacement方法中。
这意味着$2
每次找到匹配时都会获取第二组的值。
另一方面,当你使用Matcher.group(2)时,你只使用它一次 - 所以replaceAll()只接受来自find()
方法找到的第一个匹配的第二组的普通字符串。