2012-02-17 75 views
0

我正在從具有HTML標記的服務器接收字符串。我正在使用像string1.replaceAll("\\<.*?>","")這樣的正則表達式去除這些標籤,但問題是它也會刪除換行符和超鏈接。我想保留超鏈接和換行符,並刪除其他所有內容。刪除除換行符外的HTML標記

回答

4

不要使用正則表達式來解析HTML。

從HTML完全剝離(您想不是,但簡單的事):

String html = "<h1>I only want<br/>line breaks and " + 
    "<a href='http://stackoverflow.com'>links</a>, <i>not</i>" + 
    " the <b>other</b> stuff"; 
String sansHtml = Html.fromHtml(html).toString(); 

要選擇剝離它,護只有<a>(和href屬性)和<br>標籤建議您使用JSoup

Whitelist whitelist = Whitelist.none().addTags("a", "br").addAttributes("a", "href"); 
String jsoupHtml = Jsoup.clean(html, whitelist); 
1

你可以試着更換你想通過一些中間格式,以保持第一部分,恢復原來的AFTE你刪除了所有其他標籤。

string1.replaceAll("\\<br.*?>", "[br]"); 
string1.replaceAll("\\<a href='(.*?)'.*?>(.*?)\\<.*?>", "[link='$1' desc='$2']"); 
string1.replaceAll("\\<.*?>",""); 
string1.replaceAll("\\[br\\]", "<br\\>"); 
string1.replaceAll("\\[link='(.*?)' desc='(.*?)']", "<a href=\"$1\">$2<\\a>"); 

未測試的代碼,因此可能無法正常工作:)

+0

[這總是感覺有關(http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml- self-contained-tags/1732454#1732454)當人們用正則表達式來處理XML/HTML時。 – Jens 2012-02-17 12:36:38

+0

確實,正則表達式解析不適用於每個out-in-the-wild-xml/html文件。只有文件具有已知的語法時,它才能可靠地工作。 – zapl 2012-02-17 14:07:32