2015-06-17 20 views
0

如何引用Java的String.replaceAll方法中的命名捕獲組?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。基於https://blogs.oracle.com/xuemingshen/entry/named_capturing_group_in_jdk7

回答

5

你應該使用${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