在不应该匹配时进行负前瞻匹配
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
(?!->)
- ->
不允许紧靠当前位置的右侧
(?=[^;^{]*(?:[<>!]|==))
- 紧靠当前位置的右侧,除了 ;
、^
和 {
之外,必须有任何零个或多个字符,然后<
、>
、!
或 ==
。
我制作了这个正则表达式以匹配正在读取的 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
(?!->)
-->
不允许紧靠当前位置的右侧(?=[^;^{]*(?:[<>!]|==))
- 紧靠当前位置的右侧,除了;
、^
和{
之外,必须有任何零个或多个字符,然后<
、>
、!
或==
。