使用replaceAll时出现Illegal repetition near index错误的解决求助
问题分析与解决方案
错误原因
你遇到的"illegal repetition"错误,是因为replaceAll()方法的第一个参数会被当作正则表达式解析,而你的divPrefix字符串里包含了*、{、}这类正则特殊元字符(比如*表示匹配0次或多次,{n,m}用来指定重复次数),这些字符未转义就会导致正则语法错误。
解决方案
方案1:字面量替换(推荐,简单直接)
Java的String.replace()方法是字面量匹配替换,不会把参数当作正则解析,能直接替换所有出现的目标字符串,完美解决特殊字符的问题:
String request = "<div class=\"artemis-editor\" style=\"font-family:Arial,sans-serif!important;font-size: 11px!important;\"><style>.artemis-editor,.artemis-editor * {font-family:Arial,sans-serif!important;font-size: 11px!important;}</style><p>Paragraph content</p></div>"; String divPrefix = "<div class=\"artemis-editor\" style=\"font-family:Arial,sans-serif!important;font-size: 11px!important;\"><style>.artemis-editor,.artemis-editor * {font-family:Arial,sans-serif!important;font-size: 11px!important;}</style>"; // 替换所有divPrefix字面量 request = request.replace(divPrefix, ""); // 替换所有</div>字面量 request = request.replace("</div>", ""); // 输出结果:<p>Paragraph content</p> System.out.println(request);
方案2:正则转义后使用replaceAll
如果一定要用replaceAll(),可以用Pattern.quote()把目标字符串转成正则安全的字面量:
request = request.replaceAll(Pattern.quote(divPrefix), ""); request = request.replaceAll(Pattern.quote("</div>"), "");
方案3:一次性匹配移除整个外层div(更精准)
如果需求是移除所有<div class="artemis-editor">...</div>结构,只保留内部内容,可以用正则捕获组实现一次性替换:
// 转义特殊字符,构建匹配整个div的正则 String divPattern = Pattern.quote(divPrefix) + "(.*?)" + Pattern.quote("</div>"); // 用捕获组$1替换整个匹配,直接保留div内部内容 request = request.replaceAll(divPattern, "$1");
这个方法会一次性处理所有出现的该div结构,无需多次替换操作。
内容的提问来源于stack exchange,提问作者iswarya
相关产品推荐
相关产品推荐

