如何删除字符串中HTML标记中的所有HTML属性

时间:2012-02-23 15:23:12

标签: java regex html-parsing

我正在尝试使用包含HTML的字符串,去掉一些标签(img,object)和所有其他HTML标签,去掉它们的属性。例如:

<div id="someId" style="color: #000000">
   <p class="someClass">Some Text</p>
   <img src="images/someimage.jpg" alt="" />
   <a href="somelink.html">Some Link Text</a>
</div>

会变成:

<div>
   <p>Some Text</p>
   Some Link Text
</div>

我在尝试:

string.replaceAll("<\/?[img|object](\s\w+(\=\".*\")?)*\>", ""); //REMOVE img/object

我不知道如何剥离标签内的所有属性。

任何帮助都将不胜感激。

感谢。

4 个答案:

答案 0 :(得分:8)

如果您想过滤特定标签,我不建议使用正则表达式。这将是一项艰巨的工作,永远不会完全可靠。使用像Jsoup这样的普通HTML解析器。它提供了Whitelist API来清理HTML。另请参阅this cookbook document

这里是在Jsoup的帮助下的启动示例,它只允许<div>标签集旁边的<p>Whitelist标签Whitelist#simpleText()在下面的例子中。

String html = "<div id='someId' style='color: #000000'><p class='someClass'>Some Text</p><img src='images/someimage.jpg' alt='' /><a href='somelink.html'>Some Link Text</a></div>";
Whitelist whitelist = Whitelist.simpleText(); // Whitelist.simpleText() allows b, em, i, strong, u. Use Whitelist.none() instead if you want to start clean.
whitelist.addTags("div", "p");
String clean = Jsoup.clean(html, whitelist);
System.out.println(clean);

这导致

<div>
   <p>Some Text</p>Some Link Text
</div>

另见:

答案 1 :(得分:7)

您可以删除所有属性:

string.replaceAll("(<\\w+)[^>]*(>)", "$1$2");

此表达式与开始标记匹配,但仅捕获其标题<div和结束>作为组1和2. replaceAll引用用于这些要将它们作为$1$2返回到输出中的组。这会删除标记中间的属性。

答案 2 :(得分:1)

/<(/?\w+) .*?>/<\1>/可能有效 - 获取标记(匹配组)并读取任何属性,直到关闭括号,并仅用支持和标记替换它。

答案 3 :(得分:-1)

如果您使用SAX或DOM,并获取节点名称和值,并删除所有属性,可能会容易得多。