我想知道为什么只有$
抛出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);
}
这可以通过在\\
之前添加的$
来克服,但为什么只为此角色添加。
答案 0 :(得分:5)
您可以在第一个参数中捕获组,并在第二个参数中使用它们来表示"插入您在此处匹配的位":
String as = s.replaceAll("hello (.*) (\\d*)", "goodbye $2 $1");
当您使用$
时,正则表达式引擎会认为您正在尝试引用此类组。添加\\
会使其失效,使其成为一个字面上的美元。
请注意,替换字符串中的反斜杠(
\
)和美元符号($
)可能会导致结果与将其视为文字替换字符串时的结果不同;见Matcher.replaceAll
。如果需要,使用Matcher.escapeReplacement(java.lang.String)
来抑制这些字符的特殊含义。)
答案 1 :(得分:1)