Java String.replace所有带命名组的反向引用

时间:2015-06-17 21:00:24

标签: java regex backreference named-captures

如何在Java String.replaceAll方法中引用命名捕获组?

作为我正在尝试做的简化示例,请说我有正则表达式

\{(?<id>\d\d\d\d):(?<render>.*?)\}

表示字符串中的标记。字符串中可以有多个标签,我想用“渲染”捕获组的内容替换所有标签。

如果我有像

这样的字符串
String test = "{0000:Billy} bites {0001:Jake}";

并希望得到像"Billy bites Jake"这样的结果,我知道我可以用

来实现我的目标
test.replaceAll(tagRegex, "$2")

但我希望能够使用像

这样的东西
test.replaceAll(tagRegex, "$render")`

有办法做到这一点吗?使用"$render"我得到IllegalArgumentException: Illegal group reference

1 个答案:

答案 0 :(得分:5)

基于https://blogs.oracle.com/xuemingshen/entry/named_capturing_group_in_jdk7

您应该使用${nameOfCapturedGroup},在您的情况下${render}

样本:

String test = "{0000:Billy} bites {0001:Jake}";
test = test.replaceAll("\\{(?<id>\\d\\d\\d\\d):(?<render>.*?)\\}", "${render}");
System.out.println(test);

输出:Billy bites Jake