正则表达式:负向后看和负向前看

问题描述 投票:0回答:3

我想匹配单词

gay
,除非它是单词
megayacht
的一部分。我知道我可以使用负前瞻和负后瞻从匹配中排除
gayacht
megay
,例如

(?<!me)gay

gay(?!acht)

但是使用

(?<!me)gay(?!acht)

仍会将

megay
gayacht
从比赛中排除,这不是我想要的。我找不到同时需要两者的方法。

regex regex-lookarounds
3个回答
3
投票

使用

gay(?!(?<=megay)acht)

参见正则表达式证明

解释

--------------------------------------------------------------------------------
  gay                      'gay'
--------------------------------------------------------------------------------
  (?!                      look ahead to see if there is not:
--------------------------------------------------------------------------------
    (?<=                     look behind to see if there is:
--------------------------------------------------------------------------------
      megay                    'megay'
--------------------------------------------------------------------------------
    )                        end of look-behind
--------------------------------------------------------------------------------
    acht                     'acht'
--------------------------------------------------------------------------------
  )                        end of look-ahead

3
投票

您可以排除匹配的

megayacht
并匹配包含
gay

的单词
\b(?!megayacht\b)\w*gay\w*

正则表达式演示


3
投票

您可以使用交替模式:

(?<!me)gay|gay(?!acht)
© www.soinside.com 2019 - 2024. All rights reserved.