2015-06-17 8 views
0

Как вы относитесь к названным группам захвата в методе String.replaceAll Java?Java String.replaceВсе обратная ссылка с именованными группами

В упрощенном примере, что я пытаюсь сделать, что у меня есть регулярное выражение

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

, который представляет собой тег в строке. В строке может быть несколько тегов, и я хочу заменить все теги на содержимое группы захвата рендеринга.

Если у меня есть строка, как

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

и хотите получить результат, как "Billy bites Jake", я знаю, что могу достичь своей цели с

test.replaceAll(tagRegex, "$2") 

, но я хотел бы иметь возможность использовать что-то вроде

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

Есть ли способ сделать это? С помощью "$render" я получаю IllegalArgumentException: Illegal group reference.

ответ

5

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

+0

Ах, так просто. Я сошел с ума по этому поводу. Благодаря! –

+0

@ RuckusT-Boom Добро пожаловать :) – Pshemo