matcher.group(N)和“$ N”之间的区别是什么?

时间:2011-09-05 15:16:22

标签: java regex

今天早些时候,我很惊讶地发现matcher.replaceAll("$2")有效,而matcher.replaceAll(matcher.group(2)) 有效(as intended)。

我认为两者都指的是同一件事:字符串与一对捕获括号相匹配。

显然,我找不到足够详细的文档存在细微差别。

我发现this excellent intro/tutorial指的是两者,但它没有深入研究细微差别。

我在哪里可以找到更多相关信息?

1 个答案:

答案 0 :(得分:1)

来自Matcher.replaceAll的API文档:

  

此方法首先重置此匹配器。然后它扫描输入   序列寻找模式的匹配。不是的字符   任何匹配的一部分都直接附加到结果字符串;每   匹配由替换字符串替换为结果。该   替换字符串可能包含对捕获的子序列的引用   在appendReplacement方法中。

这意味着$2每次找到匹配时都会获取第二组的值。

另一方面,当你使用Matcher.group(2)时,你只使用它一次 - 所以replaceAll()只接受来自find()方法找到的第一个匹配的第二组的普通字符串。