You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 23:27:16