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
如何引用 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