regex - 捕获不属于链接的特定单词的所有出现
问题描述
我正在尝试使用来自 HTML 文本的 PCRE2 方言的正则表达式来获取所有出现的单词“apple”。但不包括苹果这个词是链接的一部分。
我是 Regex 的初学者,可能我犯了一个非常简单的错误。
\bapple\b
因此,以下文本必须匹配第一个匹配项,但不能匹配第二个和第三个匹配项。
Lorem ipsum apple sit amet, consectetur <a href="#">apple</a> elit <a href="/test/apple">lorem</a>.
我究竟做错了什么?
解决方案
在 PCRE 中,您可以使用此正则表达式:
~(?is)<a .*?</a>(*SKIP)(*F)|\bapple\b~
正则表达式详细信息:
(?is)
: 启用忽略大小写和 DOTALL 模式<a .*?</a>
:匹配文本从<a
到</a>
跳过所有<a>
标签(*SKIP)(*F)
:一起提供了一个很好的限制替代方案,您不能在 PCRE 正则表达式中进行可变长度的lookbehind|
: 或者\bapple\b
: 匹配词apple
推荐阅读
- stripe-payments - Stripe - 使用 3DS 的订阅计划
- json - 在颤动中将JSON数据添加到列表时出错
- r - 如何在动物园对象时间序列中绘制边缘以突出显示一个时期?
- android - 如何下载最新版本的 Android SDK for Visual Studio .NET 2017
- python - 在 Windows 上安装 psycopg2 时出错
- java - Java序列化,为什么保存到数据库时没有序列化异常?
- vb.net - 如何在 Visual Basic 中播放声音两次
- tensorflow - 自定义 keras 层未显示在 model.summary 中
- c - 如何修复“赋值左操作数需要 1 个值”?
- selenium - 如何使用硒读取画布元素属性值?