使用replaceAll方法时获取java.util.regex.PatternSyntaxException

使用replaceAll方法时获取java.util.regex.PatternSyntaxException,java,replaceall,patternsyntaxexception,Java,Replaceall,Patternsyntaxexception,我试图使用replaceAll方法替换文本,但出现此错误 Caused by: java.util.regex.PatternSyntaxException: Illegal repetition near index 0 ${rate+0.0020D2} 这是我的密码 String regExp = "\\$\\{rate[+-]\\d+(\\.\\d+)D[0-9]\\}"; String text = "${rate+0.0020D2},banana,${rate-0.4002D3},$

我试图使用replaceAll方法替换文本,但出现此错误

Caused by: java.util.regex.PatternSyntaxException: Illegal repetition near index 0
${rate+0.0020D2}
这是我的密码

String regExp = "\\$\\{rate[+-]\\d+(\\.\\d+)D[0-9]\\}";
String text = "${rate+0.0020D2},banana,${rate-0.4002D3},${rate+0.2003D4},${rate+bananD4},${rate+.123.415D4}";

Pattern pattern = Pattern.compile(regExp);
Matcher matcher = pattern.matcher(text);

String match = null;

List<String> matches = new ArrayList<String>(5);
while (matcher.find()) {

    int startIndex = matcher.start();
    int endIndex = matcher.end();
    match = matcher.group();
    matches.add(match.substring(2, match.length() - 1));

}
String[] results = matches.toArray(new String[0]);
for(int i=0;i <= results.length;i++){
text.replaceAll(results[i],"<span class=\"rate\""+i+">"+results[i]+ "</span>");
}
String regExp=“\\$\{rate[+-]\\d+(\\.\\d+d[0-9]\}”;
字符串文本=“${rate+0.0020D2},banana,${rate-0.4002D3},${rate+0.2003D4},${rate+bananD4},${rate+.123.415D4}”;
Pattern=Pattern.compile(regExp);
Matcher Matcher=pattern.Matcher(文本);
字符串匹配=null;
列表匹配项=新的ArrayList(5);
while(matcher.find()){
int startIndex=matcher.start();
int endIndex=matcher.end();
match=matcher.group();
matches.add(match.substring(2,match.length()-1));
}
String[]results=matches.toArray(新字符串[0]);

对于(int i=0;i您的正则表达式是
${rate+0.0020D2}
。您需要对其进行转义:

text.replaceAll(Pattern.quote(results[i]),"<span class=\"rate\""+i+">"+results[i]+ "</span>");
text.replaceAll(Pattern.quote(results[i]),“+results[i]+”;

错误消息告诉您问题:花括号用于重复指示。正则表达式“${rate…”因此无效。如果不希望字符串被替换为regex,请使用
replace
而不是
replaceAll
,否则仍然无法获取此异常java.lang.IllegalArgumentException:非法组reference@user2142786使用
Matcher.quoteReplacement(“但这不是创造性的跨度结构,它只是简单地打印value@user2142786行
text.replaceAll(Pattern.quote(results[i]),Matcher.quoteReplacement(“+results[i]+”);
有效吗?是的,它有效,但它只是打印值,而不是整个结构