Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 要匹配的正则表达式变量lookbehind(如果未加前缀)_Regex - Fatal编程技术网

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)