正则表达式只从html中删除某些标签

时间:2011-04-29 05:35:44

标签: java regex

我想从给定的html中删除一组html标签(b,i,p,标签的结尾)。

Pattern p = Pattern.compile("<[^bip/](.*?)>");

然而,这也删除了。*的img标签。我应该更改什么以防止删除img

编辑:我在Android应用上这样做。我知道正则表达式是最糟糕的方式,但内置的spannable类没有按预期工作,我不能导入一个库只是为了html解析。我的目的是检测是否存在其他标签。另外,html非常小(最多10行),性能应该不是问题。

5 个答案:

答案 0 :(得分:3)

stackoverflow已经说了一百万次。

不要使用正则表达式处理HTML,XHTML或XML。它们不是常规语言,它们是无上下文的语言,无法使用正则表达式正确处理。

答案 1 :(得分:2)

尝试使用xml(或html)是个坏主意:你肯定想要使用解析器。

在您的情况下,您想匹配:

<\s*/?\s*[bip]\s*>

删除简单字母标记

(和相同的结束标记)并考虑一些空格是否有效;你还需要将你的正则表达式作为多线运行。 它可能有用,但它很危险,你可能会有意想不到的副作用

修改: 我知道你只想删除标签,而不是标签内的实际内容

<强> EDIT2 : 当前模式匹配3个标签,而不是它们的内容。在替换regexp(替换为空)中,它将删除这些格式化标记,而不是嵌入的内容。

答案 2 :(得分:0)

我不确定我是否了解你的正则表达式,看起来与你想要的非常不同。使用类似下面的内容:

<([bip])>.*?</\1>

如果可能,请勿使用上述或任何其他正则表达式。还有其他更好的方法可以做到这一点。在这里或谷歌搜索。

答案 3 :(得分:0)

如果您只想删除<b>,<p>,<i></b>,</p>,</i>代码,则可以使用以下正则表达式:

(</?b>|</?p>|</?i>)

答案 4 :(得分:0)

大多数示例正则表达式仅检查标记以某个标记开头。例如,您可能想要删除<b>,而不是<br>。因此,在大多数示例正则表达式中,如果您在标记列表中添加<b>,它也会自动删除<br>。我使用/<\/?(font|div|b)(\/|>|\s.*?>)/g。此正则表达式可防止问题的开始。此示例只会找到fontdivb,与br不匹配。