用于从字符串中删除HTML标记的正则表达式

时间:2011-02-18 11:40:25

标签: java html regex jsp

我正在寻找一个正则表达式来从JSP中删除字符串中的所有HTML标记。

示例1

sampleString = "test string <i>in italics</i> continues";

示例2

sampleString = "test string <i>in italics";

示例3

sampleString = "test string <i";

HTML标记可能是完整的,部分的(没有结束标记)或没有正确的起始标记(第3个示例中缺少结束尖括号)本身。

提前致谢

2 个答案:

答案 0 :(得分:7)

使用正则表达式或解析器无法实现案例3。它可能代表合法内容。所以忘了它。

关于案例1和案例2的具体问题,只需使用HTML解析器即可。我最喜欢的是Jsoup

String text = Jsoup.parse(html).text();

就是这样。顺便说一句,它还有一个HTML cleaner,如果那是你实际上之后的

由于您正在使用JSP,因此您也可以使用JSTL <c:out>fn:escapeXml()来避免用户控制的HTML输入在您的HTML中内联(这可能因此打开XSS漏洞)。

<c:out value="${bean.property}" />
<input type="text" name="foo" value="${fn:escapeXml(param.foo)}" />

然后不会解释HTML标记,而只是显示为纯文本。

答案 1 :(得分:0)

<\/?font(\s\w+(\=\".*\")?)*\>

我在一周前使用这个小宝石来剥去各种12年前的html标签,它的效果非常好。只需将“font”替换为您要查找的任何标记,或使用\w*替换掉所有标记。

修改已移除'?'从我的字符串末尾意识到可以从文件中删除非标签数据。基本上,这将始终找到案例1和案例2,但如果与案例3一起使用(在正则表达式的末尾附加'?'),则应谨慎使用以确保删除的是标记。