regex Java替换所有正则表达式匹配

fafcakar  于 2022-11-18  发布在  Java
关注(0)|答案(1)|浏览(142)

我有一个htmlBody字段,它有一个网页的html分配给它。我想检查所有出现的相对链接结束在.html,并为他们中的每一个删除他们的扩展名。我不想要htmlBody.replaceAll(".html", ""),因为它会删除所有链接,并打破一些外部链接,所以我的方法是找到所有匹配regex的出现,并且对于每次出现,使用replaceAll()删除他们的扩展并附加到sb。我试图按照官方文档中的示例,但显然它没有更改任何链接,可能是什么问题?

StringBuilder sb = new StringBuilder();
Pattern p = Pattern.compile("^\\/(.+\\\\)*(.+).(html)$");
Matcher m = p.matcher(htmlBody);

while (m.find()) {
  String updatedLink = m.group().replaceAll(".html", "");
  m.appendReplacement(sb, updatedLink);
}
m.appendTail(sb);
aamkag61

aamkag611#

你正则表达式是错误的,^匹配字符串的开头,$匹配字符串的结尾。2所以你的代码中的匹配器永远不会匹配。
右正则表达式类似于Pattern p = Pattern.compile("['\"]\\/(.+\\\\)*(.+).(html)");,但它不能匹配<a href=/a.html>

相关问题