Matcher appendReplacement 遇到的异常

报错信息如下

-- test$

Exception in thread "main" java.lang.IllegalArgumentException: Illegal group reference: group index is missing
	at java.util.regex.Matcher.appendReplacement(Matcher.java:819)

-- s0.$bds

Exception in thread "main" java.lang.IllegalArgumentException: Illegal group reference
	at java.util.regex.Matcher.appendReplacement(Matcher.java:857)

-- ic.com/$70cFv

Exception in thread "main" java.lang.IndexOutOfBoundsException: No group 7
	at java.util.regex.Matcher.start(Matcher.java:375)
	at java.util.regex.Matcher.appendReplacement(Matcher.java:880)

解决方案

主要是被替换的文本中有特殊字符$,$符号处理会按照$1—$*的分组模式进行匹配。 代码改成如下方式即可,增加:Matcher.quoteReplacement('字符串$')

appendReplacement问题:

// bug修复 文本中的$转义
m.appendReplacement(sb,Matcher.quoteReplacement(value));

replaceAll问题:

// bug修复 文本中的$转义
System.out.println("test".replaceAll("test",Matcher.quoteReplacement("$1")));
更新日期:
作者: qwding, 丁乾文