我在查找正则表达式时遇到麻烦,无法找到“ $ i = 0”而不是“ $ i == 0”

时间:2019-07-30 05:04:08

标签: c# regex

我在以下输入中找不到正则表达式以找到$i=0而不是$i==0的麻烦。

我尝试在表达式中包含类似$i=0; if ($i==0) Console.Write($i)的内容,但仍然可以匹配两种情况。

这是在Visual Studio 2019上

3 个答案:

答案 0 :(得分:1)

[^==]不会否定表达式==,因为除了括号中的内容外,它都匹配所有内容,这意味着您只将=排除了两次,使其等同于[^=]

您要断言=之前的内容不是另一个=,这意味着您需要在后面进行否定查找:(?<!=)

因此模式将为\$.(?<!=)=([^=])

Demo

答案 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中,您可以观察到它如何与某些示例输入匹配,如果你喜欢。