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

Другие вопросы по тегам