正则表达式从字符串中删除HTML标记

时间:2012-06-27 15:30:28

标签: html regex

  

可能重复:
  Regular expression to remove HTML tags

是否有表达式可以获取两个HTML标记之间的值?

鉴于此:

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

我正在寻找一个表达式,它会返回0,剥离<td>标签。

3 个答案:

答案 0 :(得分:122)

您不应尝试使用正则表达式解析HTML。 HTML不是常规语言,因此您提出的任何正则表达式都可能在某些深奥的边缘情况下失败。有关详细信息,请参阅this question的开创性答案。虽然大部分格式化为一个笑话,但它是一个非常好的观点。


以下示例是Java,但正则表达式与其他语言类似(如果不相同)。


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

假设您的非HTML不包含任何&lt;或者&gt;并且输入字符串的结构正确。

如果您知道它们是特定标记 - 例如您知道文本只包含<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替换为单个空格,然后折叠空白,然后修剪任意两端。

答案 1 :(得分:44)

一个简单的方法是替换

<[^>]*>
什么也没有。但是,根据你的输入结构错误,可能会失败。

答案 2 :(得分:3)

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

来做
Whitelist whitelist = Whitelist.none();
String cleanStr = Jsoup.clean(yourText, whitelist);