2011-02-18 182 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一起使用(在正則表達式的末尾添加「?」),應謹慎使用以確保刪除的內容是標記。

相關問題