【发布时间】:2018-05-12 12:53:22
【问题描述】:
我有一些 HTML,我需要匹配一个不在 <a> 标记内的短语“我的短语”。
不应匹配的短语:
1. <a>My Phrase</a>
2. <a><strong>My Phrase</strong></a>
应该匹配的短语:
3. <strong>My Phrase</strong>
4. My Phrase
我的当前解决方案使用否定前瞻来查找后面没有结束 </a> 标记的匹配项:
My Phrase(?![^<]*>|[^<>]*<\/a)
https://regex101.com/r/n1d9KZ/1
正如您在示例中看到的那样,它适用于常规文本链接(案例 1),但在“a”标签内嵌套其他标签时会中断案例 2。
是否有人有适用于两者的负前瞻正则表达式?
我不能对诸如(?<!<a.*?>.*?)My Phrase(?!.*?<\/a>) 之类的正则表达式使用否定的lookbehind,因为我收到错误java.util.regex.PatternSyntaxException: Look-behind group does not have an obvious maximum length。我也不想解析 HTML 并删除所有当前的“a”标签,因为我需要保持 HTML 完整并将“My Phrase”替换为“Another Phrase”。
【问题讨论】:
-
jsoup 之类的库将大大减少 HTML 解析的麻烦。
标签: java html regex negative-lookahead