Java String.replaceAll обратная ссылка с именованными группами
Как вы ссылаетесь на именованные группы захвата в 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
,
1 ответ
Основано на https://blogs.oracle.com/xuemingshen/entry/named_capturing_group_in_jdk7
ты должен использовать ${nameOfCapturedGroup}
который в вашем случае будет ${render}
,
DEMO:
String test = "{0000:Billy} bites {0001:Jake}";
test = test.replaceAll("\\{(?<id>\\d\\d\\d\\d):(?<render>.*?)\\}", "${render}");
System.out.println(test);
Выход: Billy bites Jake