Java 使用Regex标识存在的html标记

Java 使用Regex标识存在的html标记,java,regex,Java,Regex,我在android上做这件事,我不想使用任何html解析器(库),因为唯一的目的是了解除了和 即时通讯使用: 模式p= 模式。编译(“”) 这可以很好地返回除B、I、p之外的所有标记,但它也会删除标记。有人可以修改它而不忽略img标签吗?您想识别还是删除标签 您想区分像这样的标签和符合合法定义的标签吗 有关在java中创建轻量级HTML清理策略的方法,请参阅。我认为您的正则表达式定义应该如下所示: Pattern p = Pattern.compile("(?i)<(?![bip]\\b)

我在android上做这件事,我不想使用任何html解析器(库),因为唯一的目的是了解除了

即时通讯使用:

模式p= 模式。编译(“”)


这可以很好地返回除B、I、p之外的所有标记,但它也会删除标记。有人可以修改它而不忽略img标签吗?

您想识别还是删除标签

您想区分像
这样的标签和符合合法定义的标签吗


有关在java中创建轻量级HTML清理策略的方法,请参阅。

我认为您的正则表达式定义应该如下所示:

Pattern p = Pattern.compile("(?i)<(?![bip]\\b).*?/?>");
Pattern p=Pattern.compile(“(?i)”);
  • 用于否定前瞻//即

如果您想找到文档中的标签,我建议您使用多个步骤:

  • 提取所有标签并将其放入列表中;regexp相当简单
  • 对你的单性列表进行排序,过滤它以删除你不需要的符号(如i、b、p…)
这样做可以封装到一个类中,如果您想过滤其他标记,则更易于配置,比神秘的正则表达式更易于理解和长期维护


我的2c

哦,我的错,第一次可能没有答对问题。编辑了答案。请再试一次。是的,我肯定我已经在上面的答案中添加了一些描述,在这里添加了更多。此正则表达式正在使用负前瞻,如下所述:。我的回答基本上是说match
不错,但我有一些缺点。(1) 
/?
是否与
*?
冗余?(2)
*?
不应该匹配换行符,或者有DOT\u ALL标志吗?(3) 要正确处理
,可以将
\\b
替换为
(?!=[A-Z0-9:-])
@MikeSamuel:完全同意您的观点#这里的1和2。然而,大约3:OP想要否定Android上匹配的标准HTML标记
,而AFAIK
不属于这一类。这看起来像是其他人用他们的观点劫持线程的复制品。没有人愿意提供准确的解决方案。@taranfx,您说过“但它也删除了
标记”。你这是什么意思?我的正则表达式删除了它,但我不想。