正则表达式:负向后看和负向前看
Regex: negative lookbehind AND negative lookahead
我想匹配单词 gay
除非它是单词 megayacht
的一部分。我知道我可以使用负前瞻和负后视来从匹配中排除 gayacht
或 megay
,例如
(?<!me)gay
和
gay(?!acht)
但使用
(?<!me)gay(?!acht)
仍然会从匹配中排除 megay
和 gayacht
,这不是我想要的。我找不到同时要求两者的方法。
您可以排除匹配 megayacht
并匹配包含 gay
的词
\b(?!megayacht\b)\w*gay\w*
您可以使用交替模式:
(?<!me)gay|gay(?!acht)
使用
gay(?!(?<=megay)acht)
参见regex proof。
解释
--------------------------------------------------------------------------------
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
我想匹配单词 gay
除非它是单词 megayacht
的一部分。我知道我可以使用负前瞻和负后视来从匹配中排除 gayacht
或 megay
,例如
(?<!me)gay
和
gay(?!acht)
但使用
(?<!me)gay(?!acht)
仍然会从匹配中排除 megay
和 gayacht
,这不是我想要的。我找不到同时要求两者的方法。
您可以排除匹配 megayacht
并匹配包含 gay
\b(?!megayacht\b)\w*gay\w*
您可以使用交替模式:
(?<!me)gay|gay(?!acht)
使用
gay(?!(?<=megay)acht)
参见regex proof。
解释
--------------------------------------------------------------------------------
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