关于java字符串替换的难题?

需求就是替换HTML文档中的敏感词。但是只想替换纯文本,而有些html标签中含有敏感词,我是不想替换的。比如img标签的src中含有敏感词,如果把src中的敏感词替换那么图片就显示不了了。

比如 <p>今天天气不错abc</p><img src="abc.jpg"/> 我想替换abc为*

那么替换为<p>今天天气不错*</p><img src="abc.jpg"/>

如果我单纯的使用Java的String.replaceAll("abc","*")

那么就会得到 <p>今天天气不错*</p>
<img src="*.jpg/>
,这样图片就加载不出来了,这并不是我想要的。

想了挺久,也想了正则,各位大佬有没有什么好方法???

阅读 2.9k
3 个回答

为何非要在页面级别用正则替换?在存库的时候就替换掉不好吗?或者在取出来渲染到页面模板的时候做替换不好吗?为何非要纠结在html代码中进行替换?

新手上路,请多包涵

简单一点的就是上面大佬说的那种做法,不想这样的话就直接截取<img前面的字符串,然后替换在拼接回去

两种方法:

一:正则

(?!<[^>]*)[a][b][c](?![^<]*>)

图片描述

运行结果:
图片描述

二:Jsoup 解析 HTML ,写选择器遍历判断

我更倾向于用第二种方法,因为正则很难维护…… 如果以后需要替换别的,还要再研究

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏