2011-02-18 144 views
2

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

实施例1

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

实施例2

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

实施例3

sampleString = "test string <i"; 

的HTML标签可以是完全,部分(没有结束标记)或无合适的起动标记(在第三个例子中缺少关闭角度支架)。

在此先感谢

+1

[我正在寻找一个正则表达式来从字符串中移除给定的(x)HTML标记](http://stackoverflow.com/questions/116403/im-looking-for-a-regular -expression-to-remove-a-given-xhtml-tag-from-a-string)你可能错过了很多以前相关的问题列表,同时输入你自己的问题的标题:) – 2011-02-18 11:43:49

+0

这样也会满足第三个例子吗? – rahul 2011-02-18 11:45:07

回答

6

情况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标记将不会被解释,而只是显示为纯文本。

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

我在一个星期前使用这个小宝石来剥离各种12岁的html标签,它的工作非常好。只需将'font'替换为您正在查找的任何标签,或使用\w*即可将其全部删除。

编辑删除'?'从字符串的末尾意识到可以从文件中删除非标记数据。基本上,这将持续发现情况1和2,但如果与情况3一起使用(在正则表达式的末尾添加“?”),应谨慎使用以确保删除的内容是标记。

相关问题