笔者在Java中遇到 java.lang.IllegalArgumentException: Illegal group reference 这样一个错误,然后百度找了原因,具体就是 String的replaceAll(regex, replacement)方法会调用java.util.regex.Matcher.appendReplacement(sb, replacement)方法,然后笔者的字符串中含有特殊字符“$”,而出现这种的原因是 String的replaceAll(regex, replacement)方法的第一个参数支持正则表达式,如果参数replacement中出现符号“$”,会按照$1$2的分组模式进行匹配。当编译器发现“$”后跟的不是整数的时候,就会抛出“Illegal group reference”的异常。
然后笔者查看了自己的代码,代码中没有明显的 replaceAll 方法,那么为啥还会报这种错误了,最后发现对某个字符串处理时会隐式调用 replaceAll 方法,而且这个字符串就出现特殊字符“$”了,最后的解决方法是先调用:java.util.regex.Matcher.quoteReplacement() 方法对特殊字符串进行处理,然后顺利解决了。