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

Wil*_*gyi 6 regex regex-lookarounds

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

(?<!me)gay
Run Code Online (Sandbox Code Playgroud)

gay(?!acht)
Run Code Online (Sandbox Code Playgroud)

但使用

(?<!me)gay(?!acht)
Run Code Online (Sandbox Code Playgroud)

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

Rys*_*ech 3

使用

gay(?!(?<=megay)acht)
Run Code Online (Sandbox Code Playgroud)

请参阅正则表达式证明

解释

--------------------------------------------------------------------------------
  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
Run Code Online (Sandbox Code Playgroud)