2010-07-21 136 views
4

我收到了一些html文本,其中包含各種html標籤,如<table>, <a>, <img>等。如何刪除除img以外的所有html標籤?

現在我想使用正則表達式來刪除除<img ...></img>(和大寫<IMG></IMG>)之外的所有html標記。

如何做到這一點?


UPDATE:

我的任務很簡單,它只是打印文本內容(包括圖片)一個HTML作爲頭版的總結,所以我覺得正則表達式是好的,夠簡單。


再次更新

也許樣品會讓我的問題更好地理解:)

有一些HTML文本:

<html> 
    <head></head> 
    <body> 
    Hello, everyone. Here is my photo: <img src="xxx.jpg" />. 
    And, <a href="xxx">know more</a> about me! 
    </body> 
</html> 

我想保留,並刪除其他標籤。下面是我想:

Hello, everyone. Here is my photo: <img src="xxx.jpg" />. And, know more about me! 

現在我這樣的代碼:

html.replaceAll("<.*?>", "") 

但它會刪除所有<>之間的內容,但我想保持<img xxx></img>,並刪除其他內容<and>

謝謝大家!

+0

步驟1 ...不使用正則表達式:) – 2010-07-21 08:06:22

+0

唐爲此使用正則表達式。你使用什麼編程語言? – 2010-07-21 08:06:32

+0

+1,因爲知道爲什麼你不應該這樣做:) – willcodejavaforfood 2010-07-21 08:09:56

回答

7

我嘗試了很多,這正則表達式似乎爲我工作:

(?i)<(?!img|/img).*?> 

我的代碼是:

html.replaceAll('(?i)<(?!img|/img).*?>', ''); 
+2

不錯。 +1。你能告訴我爲什麼我看不到replaceAll方法嗎?什麼類型是'html'? – 2013-02-12 11:55:04

+0

@freewind同樣在這裏,不能看到替換所有工作 – Faizan 2016-05-14 09:41:13

+0

@Faizan,'html'應該是一些html內容的字符串,代碼應該是Java(這是我很早的問題,我不確定我是否記得它正確) – Freewind 2016-05-14 14:57:12

0
<(img|IMG)*>*</(img|IMG)> 
+0

@mathk,謝謝。你的代碼是匹配img標籤(我是對嗎?),但我想要做的是匹配非img標籤。 – Freewind 2010-07-21 08:17:55

+0

你可以忽略案例 – abatishchev 2010-07-21 08:18:37

+0

@Freewind然後將其替換爲空字符串 – mathk 2010-07-21 08:22:31

4

不要使用正則表達式來解析HTML。請參閱here以瞭解原因。

爲您的語言/平臺使用HTML解析器。

  • Here是一個java一個(HTML解析器)
  • 對於.NET的HTML Agility Pack建議
  • 對於紅寶石,有nokogiry,雖然我不是一個Ruby開發,所以不知道如何好的是
+0

@已付,謝謝。我不解析html,這對我簡單的任務來說太重了。我認爲正則表達式是最好的工具,但我不知道該怎麼寫:) – Freewind 2010-07-21 08:16:34

+0

@Freewind - 作爲我發佈的第一個鏈接,HTML不是一種常規語言,並且_cannot_可以被RegEx可靠地解析。你應該使用正確的工具來完成這項工作。如果你知道_exactly_什麼格式你的HTML將進入,字符串替換甚至可能是足夠的... – Oded 2010-07-21 08:18:46

+0

我仍然想使用正則表達式。我不需要完全相同的處理,它大多數時間工作可以 – Freewind 2010-07-21 08:31:54

1

一個簡單的答案爲什麼不使用正則表達式是:

正則表達式不能解析遞歸語法如:

S -> (S) 
S -> Empty 

因爲這種語法有無限狀態。

由於HTML具有遞歸語法,因此可以簡單地使用regexp。

但在你的情況下,你可以表達一個不遞歸的正則表達式。

相關問題