我在以下输入中找不到正则表达式以找到$i=0
而不是$i==0
的麻烦。
我尝试在表达式中包含类似$i=0; if ($i==0) Console.Write($i)
的内容,但仍然可以匹配两种情况。
这是在Visual Studio 2019上
答案 0 :(得分:1)
[^==]
不会否定表达式==
,因为除了括号中的内容外,它都匹配所有内容,这意味着您只将=
排除了两次,使其等同于[^=]
您要断言=
之前的内容不是另一个=
,这意味着您需要在后面进行否定查找:(?<!=)
。
因此模式将为\$.(?<!=)=([^=])
答案 1 :(得分:1)
这应该找到一个整数给变量的赋值,而不是进行比较:
string match = @"$i=0";
string noMatch = @"$i==0";
string pattern = @"\$\w+={1}\d+";
Console.WriteLine("Match" + Regex.Match(match, pattern).Success);
Console.WriteLine("No Match" + Regex.Match(noMatch, pattern).Success);
说明
\w+
:匹配1个或多个出现的字母
={1}
:仅匹配1个出现的操作符
\d+
:匹配1个或多个数字
输出:
匹配:True
没有匹配项:错误
这是您的测试输入:
string testInput = @"$i=0; if ($i==0) Console.Write($i)";
Console.WriteLine(Regex.Match(testInput, pattern).Value);
输出:
$ i = 0
答案 2 :(得分:0)
我猜想也许您可能想设计一个看起来像这样的表达式:
\$[^=]+=\s*\d+
虽然不确定。
该表达式在regex101.com的右上角进行了解释,如果您想探索/简化/修改它,在this link中,您可以观察到它如何与某些示例输入匹配,如果你喜欢。