如何在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
。
答案 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