Java String.replaceAll 带命名组的反向引用

Java String.replaceAll backreference with named groups

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

作为我正在尝试做的事情的简化示例,假设我有正则表达式

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

表示字符串中的一个标签。一个字符串中可以有多个标签,我想用"render"捕获组的内容替换所有标签。

如果我有一个像

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

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

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

但我希望能够使用类似

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

有办法吗?使用 "$render" 我得到 IllegalArgumentException: Illegal group reference.

基于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