2011-05-19 41 views
13

即你如何做到這一點?

String string = "Sample string with ${title} to be inserted."; 
string.replaceAll("${title}", title); 

在以下的錯誤結果的全部:

string.replaceAll("\\${title}", title); 
string.replaceAll("\\\\${title}", title); 
string.replaceAll("\\\\$\\{title\\}", title); 

多,似乎沒有任何工作,這一切都導致了這樣的錯誤:

java.util.regex.PatternSyntaxException: Illegal repetition near index 4 \\$\\{title\\} 
    at java.util.regex.Pattern.error(Pattern.java:1713) 
    at java.util.regex.Pattern.closure(Pattern.java:2775) 
    at java.util.regex.Pattern.sequence(Pattern.java:1889) 
    at java.util.regex.Pattern.expr(Pattern.java:1752) 

回答

14

不知道如何最後一個會導致錯誤;它只是不匹配任何內容,因爲您在$上使用的反斜槓太多。

這應該工作:

string.replaceAll("\\$\\{title\\}", title); 
1

這聽起來像模板語言如FreeMarker的典型使用情況。

+0

我沒有加載模板語言來替換一個簡單的字符串。謝謝你的提示。 – Jacob 2011-05-19 23:24:13

0

\$\{title\}

+0

不起作用,已經嘗試過 – Jacob 2011-05-19 23:23:48

+0

反斜槓將被Java而不是正則表達式轉義。 – alternative 2011-05-19 23:24:35

+0

然後跳過反斜槓:'\\ $ \\ {title \\}' – daalbert 2011-05-19 23:36:48

23

模式類有這樣

string.replaceAll(Pattern.quote("${title}"), title); 
6

爲使用逃生功能,您可以逃脫搜索字符串作爲\Q${title}\E

+1

+1用於在正則表達式中展示相對未知的轉義序列 – 2011-05-20 01:51:09

0

正則表達式中的轉義字符是\要使用這個我們必須寫\\String,\用作轉義字符。

例如str = str.replaceAll("rot\\*speed", "rotorspeed");

rot*speed將與rotorspeed 被替換。