java - 匹配时忽略 html 标签的正则表达式

标签 java regex

<分区>

我有一个 Java 程序,目前我正在使用正则表达式来替换 HTML 文档中的任何术语,并且工作正常。

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

但是,如果单词被部分格式化为富文本标签,则不会匹配这些单词。 例如。 测试

<b>tes</b>ting

在这种情况下,单词“testing”没有匹配,因为“tes”是粗体文本。

有什么方法可以替换被这样的标签破坏的单词。同样重要的是,我不会丢失单词上的富文本格式,因此只剥离标签而不将它们插入正确的位置不是一种选择。

最佳答案

不幸的是,您无法仅通过正则表达式可靠地将 HTML 匹配到这种程度。这是因为 HTML 是一个 context-free language而不是 regular language可使用正则表达式解析。具体限制是正则表达式无法将起始 HTML 标记与结束标记相关联,它需要这样做才能在保持格式不变的同时执行匹配。

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

关于java - 匹配时忽略 html 标签的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13888123/

相关文章:

java - Facebook SDK 导入错误

java - 如何格式化资源包值以 HTML 格式显示

java - 类加载相关的war部署错误

Java同步类中的方法

java - 为什么此 Java 流的一个版本在静态 map 上工作而另一个版本失败?

Java正则表达式匹配整数

VBScript 中的 Regex Positive Lookbehind 替代方案

python - 在两组交替出现的字符串之间找到字符串

Python非贪婪正则表达式来清理xml

regex - 如果模式匹配,则从字符串中删除最后 4 位数字