You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在VBA正则表达式模式中使用三个Negative lookahead?

正则表达式修改需求与解决方案

现有正则模式

我正在使用以下正则表达式模式:

\b[Mm]od(?!er).*\b[hH]\b

现有正则各部分解释

  • \b - 单词边界,断言后续内容前无其他单词字符
  • [Mm]od - 匹配大小写m后跟od的字符串
  • (?!er) - 负向前瞻,断言当前位置后不跟er
  • .* - 贪婪匹配除换行符外的任意0个及以上字符
  • \b[hH]\b - 匹配带单词边界的单个大小写h字符

需求说明

基本需求

匹配包含以mod开头单词的单元格,但排除以Modif、Moder、Modr开头的单词;同时内容中必须存在单个大小写h字符。

具体要求

在现有负向前瞻(?!er)的基础上,添加针对Modif和Modr的负向前瞻规则。

验证示例

内容正则预期结果
new modified of module h 1TRUE
of mod HTRUE
new of mod_HTRUE
new moderate of mod_HTRUE
to modules (A & h)TRUE
new modified and moderate HFALSE
new modification of A mod_AFALSE
to modules (D & E)FALSE
to mode (F, G & A)FALSE

修改后的正则与VBA代码

修改后的正则模式

\b[Mm]od(?!er)(?!if)(?!r).*\b[hH]\b

正则修改说明

新增两个负向前瞻:

  • (?!if):断言mod后不跟if,排除Modif开头的单词
  • (?!r):断言mod后不跟r,排除Modr开头的单词

也可以将多个负向前瞻合并为更简洁的写法,效果完全一致:

\b[Mm]od(?!(er|if|r)).*\b[hH]\b

更新后的VBA函数

Public Function RegexMtch(str) As Boolean  
    With CreateObject("vbscript.regexp")
        .Pattern = "\b[Mm]od(?!er)(?!if)(?!r).*\b[hH]\b"
        RegexMtch = .Test(str)
    End With
End Function

内容的提问来源于stack exchange,提问作者Waleed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 17:15:33