我想从给定的html中删除一组html标签(b,i,p,标签的结尾)。
Pattern p = Pattern.compile("<[^bip/](.*?)>");
然而,这也删除了。*的img标签。我应该更改什么以防止删除img
编辑:我在Android应用上这样做。我知道正则表达式是最糟糕的方式,但内置的spannable类没有按预期工作,我不能导入一个库只是为了html解析。我的目的是检测是否存在其他标签。另外,html非常小(最多10行),性能应该不是问题。
答案 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
。此正则表达式可防止问题的开始。此示例只会找到font
,div
和b
,与br
不匹配。