在不应该匹配时进行负前瞻匹配

Negative look ahead matching when it should not match

我制作了这个正则表达式以匹配正在读取的 var

\bvar\b([^;^{]*?([\s]*?([<]|[>]|[!]|[=]{2})))([^;]*?)(?!=)

这些是我的测试字符串:

var->var1 = blah;     //must not match -but matches
var = 8;              //as expected - do not match          
if(var >= 9)          //as expected - matches
if(var ->var1 == balh) //as expected - matches

here

(([<]|[>]|[!]|[=]{2}) 检查是否存在 >、<、! 或 ==)

我的问题是当读取 var 时它应该匹配(不需要得到结果),而不是写入。但当 var-> 出现在我的测试字符串中,它自动匹配,因为 [>] 在我的正则表达式中。我尝试了否定前瞻 ([^;]*?)(?!=) 。但这对我原来的正则表达式没有任何作用。

您可以使用

修复当前表达式
\bvar\b(?!->)(?=[^;^{]*(?:[<>!]|==))

参见regex demo

详情:

  • \bvar\b - 一个完整的单词 var
  • (?!->) - -> 不允许紧靠当前位置的右侧
  • (?=[^;^{]*(?:[<>!]|==)) - 紧靠当前位置的右侧,除了 ;^{ 之外,必须有任何零个或多个字符,然后<>!==