如何将单个等号与正则表达式匹配?

时间:2015-02-11 17:20:05

标签: c# regex match

我有以下表达式:

if(x == a+b) b=a+2; else x = 1;

我需要匹配一个等号=。不是==,而不是====等等。并且它应匹配标志周围没有空格,只是等号。 我有一个怪物般的注册。表达式匹配上面代码中的所有内容,我需要的只是单个等号。 这是我的expr:

 /\bif\b|\belse\b|\(|\)|\+|\-|\*|\\|\>|\<|\<=|\>=|(?<![!=])[!=]=(?!=)|([a-zA-Z][a-zA-z0-9_]*)|(\d+\.?\d*)/g

虽然它可能不是最佳变体(我确定它不是:)),我需要通过管道添加“等于匹配”|进入我的表达。

看起来很奇怪,但我没有找到通过stackoverflow问题搜索的解决方案...

3 个答案:

答案 0 :(得分:7)

您需要使用look-ahead and look-behind zero length assertion。您正在寻找的正则表达式应为(?<!=)=(?!=)。这要求我们发现=前面没有等号(?<!=),而后面没有等号(?!=)

答案 1 :(得分:2)

这是我能提出的最简单的方法:

(?<!=)=(?!=)

答案 2 :(得分:1)

前瞻和后视的建议答案可能会因空字符串而失败。相反,请使用(^|[^=])=($|[^=])

  • (^|[^=]):字符串的开头是否为=字符
  • ==字符
  • ($|[^=]):字符串的结尾或=字符