Regex 要匹配的正则表达式变量lookbehind(如果未加前缀)
在本例中:Regex 要匹配的正则表达式变量lookbehind(如果未加前缀),regex,Regex,在本例中: no lorem lipsum rats lorem rats lipsum no rats lorem lipsum do no mice lorem rats ! mice lorem lipsum do # Match if contains 'rats' or 'mice' only if no preceded by 'no'. 我希望我的regexp只有在老鼠和老鼠没有被no所控制的情况下才匹配 一个简单的解决方案是使用PCRE不允许的变量lookback: /(?&
no lorem lipsum rats
lorem rats lipsum no
rats lorem lipsum do
no mice lorem rats !
mice lorem lipsum do
# Match if contains 'rats' or 'mice' only if no preceded by 'no'.
我希望我的regexp只有在老鼠和老鼠没有被no所控制的情况下才匹配
一个简单的解决方案是使用PCRE不允许的变量lookback:
/(?<!no.*)(rats|mice)/
/(?
如何使其工作?您不能在PCRE中使用可变长度lookbehinds。但您可以使用魔术序列模拟它:
(?:(?!no.)*
匹配所有未后跟no
的内容,\K
重置到目前为止已匹配的内容,(老鼠)
捕获单词
您可以使用PCRE动词,(*SKIP)(*F)
您使用哪个平台运行regex?PCRE支持lookback(这是您的情况),不是吗?我在PCRE/php上使用它/Perl@coin:PCRE不支持可变长度lookbehinds,但有另一种解决方案。请参阅下面的答案。@coin您的预期输出是什么?
^(?:(?!no).)*\K(rats|mice)
(.*?no.*?(rats|mice).*)(*SKIP)(*F)|(?:rats|mice)