2012-06-27 216 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 *的内容。 –

相关问题