2012-06-27 164 views
48

可能重複:
Regular expression to remove HTML tags正則表達式從字符串中刪除HTML標籤

是否有這將讓兩個HTML標記之間的值的表達式?

有鑑於此:

<td class="played">0</td> 

我找這將返回0,剝離<td>標籤的表達式。

+3

難道是字符串,整個字符串,只是字符串?如果是這樣,那麼'\ d +'怎麼樣? – Ryan

+1

我正在使用這樣的東西:'(?:。+? | 。+? | <(?:!/?[a-zA-Z] +)。*?/?>)'並用'「」替換。 –

+0

如果你正在閱讀這個問題,請***請閱讀接受的重複答案。這裏的前兩個答案都容易受到非常簡單的輸入。 TL; DR:正則表達式對於正確剝離HTML標記不是有用的。 –

回答

31

一個平凡的方法是什麼也沒有更換

<[^>]*> 

。但取決於你的投入是多麼糟糕,可能會失敗。

+1

替換是不好的方法。對於更多的匹配,你可以將它們合併爲一個字符串 –

+0

我不認爲我得到你想說的話。 – Joey

+0

鑑於'​​第一個​​第二個',在你的文章中使用'replaceAll'將會產生'FirstSecond'。 –

3

您可以用jsoup http://jsoup.org/

Whitelist whitelist = Whitelist.none(); 
String cleanStr = Jsoup.clean(yourText, whitelist); 
+6

JSoup是一個非常酷的庫,但是除非OP計劃做的不僅僅是簡單的替換,他在他原來的文章中描述過它可能是一個相當重的解決方案 –

96

你不應該試圖用正則表達式解析HTML做到這一點。 HTML不是一種常規語言,所以你提出的任何正則表達式可能會在一些神祕的邊緣情況下失敗。有關詳細信息,請參閱this question的重要答案。雖然大多數是作爲一個笑話格式化,但它是一個很好的觀點。


下面的例子是Java,但正則表達式將是類似的 - 如果不相同 - 其他語言。


String target = someString.replaceAll("<[^>]*>", ""); 

假設你非HTML不包含任何<或>和您輸入的字符串結構正確。

如果你知道他們是一個特定的標籤 - 例如,你知道的文本只包含<td>標籤,你可以做這樣的事情:

String target = someString.replaceAll("(?i)<td[^>]*>", ""); 

編輯: Ωmega提出了一個很好的點對另一篇文章發表評論說,如果存在多個標籤,這將導致多個結果全部被擠在一起。

例如,如果輸入的字符串是<td>Something</td><td>Another Thing</td>,那麼上述將導致SomethingAnother Thing

在多個標籤被預期的情況下,我們可以這樣做:

String target = someString.replaceAll("(?i)<td[^>]*>", " ").replaceAll("\\s+", " ").trim(); 

這取代了HTML用一個空格,然後崩潰的空白,然後修剪任何的結束。

+2

例如:'

text

here

'。明白了嗎? –

+0

您不應該對我的評論產生不利影響。我並沒有讓你失望,我現在可以通過降低你的想法來證明它,如果你想... –

+1

OP說:「我是lo爲表達式返回0,剝離​​標籤。「帖子的標題是」用於從字符串中刪除html標籤的正則表達式「。我剝去了'​​'標籤。在OP的任何地方都沒有提及任何有關pattern * matching *的內容。 –

相關問題