2

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

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

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

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

如果我有一个字符串

String test = "{0000:Billy} bites {0001:Jake}";

并想得到这样的结果"Billy bites Jake",我知道我可以实现我的目标

test.replaceAll(tagRegex, "$2")

但我希望能够使用类似的东西

test.replaceAll(tagRegex, "$render")`

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

4

1 回答 1

5

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

你应该使用${nameOfCapturedGroup}which 在你的情况下是${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

于 2015-06-17T21:02:48.677 回答