![](/img/trans.png)
[英]Java String.replaceAll doesn't replace a quote with escaped quote
[英]Java String.replaceAll doesn't replace a dollar
我想知道為什么只有$
拋出java.lang.IllegalArgumentException: Illegal group reference
異常而不是其他任何特殊字符:
public static void main(String[] args) {
String s = "asdf ok done %test%";
String as=s.replaceAll("%test%", "$dsf");
System.out.println(as);
}
可以通過在$
之前添加\\\\
來克服此問題,但是為什么只為此字符添加。
您可以在第一個參數中捕獲組,並在第二個參數中使用它們來表示“在此處插入您匹配的位”:
String as = s.replaceAll("hello (.*) (\\d*)", "goodbye $2 $1");
當使用$
,正則表達式引擎認為您正在嘗試引用這樣的組。 添加\\\\
會使它轉義,從而使它成為一個實際的美元。
Javadoc中對此進行了描述:
請注意,替換字符串中的反斜杠(
\\
)和美元符號($
)可能導致結果與被當作文字替換字符串的結果有所不同。 參見Matcher.replaceAll
。 如果需要,可以使用Matcher.escapeReplacement(java.lang.String)
取消顯示這些字符的特殊含義。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.