正则表达式在匹配时忽略html标记

时间:2012-12-15 00:26:14

标签: java regex

我有一个java程序,目前我使用正则表达式替换HTML文档中的任何术语,这很好。

Pattern p = Pattern.compile(links);
Matcher m = p.matcher(text);
RegexText = m.replaceAll("ReplacementString");

但是,如果使用富文本标记部分格式化单词,则单词不匹配。 例如。 TES

<b>tes</b>ting

在这种情况下,“测试”一词不匹配,因为“tes”是粗体文字。

有没有办法替换像这样的标签破坏的单词。此外,重要的是我不要松开单词上的富文本格式,因此只需剥离标签而不将其插回正确的位置就不是一种选择。

1 个答案:

答案 0 :(得分:3)

不幸的是,您只能使用正则表达式将HTML与此范围内的内容进行可靠匹配。这是因为HTML使用正则表达式是context-free language而不是regular language parseable。具体限制是正则表达式无法将开始HTML标记与结束标记相关联,在执行匹配时需要执行此操作,同时保持格式不变。

考虑使用HTML解析器 - Java有很多选项。