为什么我的正则表达式匹配这个,我怎么能阻止它这样做

时间:2012-07-17 13:24:58

标签: regex

我正在使用正则表达式来验证公式(类似excel)。这些公式可以包含字符串(引号之间),单元格引用(在C []占位符中指示 - > C [A4])或整数值。它们被“&”连接起来焦炭。以下是有效公式的几个示例:

  • = C [A4] + C [B4]
  • =“这是文字,我可以输入我想要的任何内容,例如这个整数值:”& 123456789
  • = “开始” 及(C [A4] + C [A3])/ 2和123安培; “结束”

这是我正在使用的正则表达式:

^-?(\d+)|(C\[[A-Z][0-9]\])([-\+\*\/][\(]*-?((\d+)|(C\[[A-Z][0-9]\]))[\)]*)*$

直到现在,它已经完成了应该做的事情。我还有一个自动更正,它将输入放在无法验证为公式的输入周围。所以当我进入

=200X-8

它应该在“=”之后的内容周围加上引号。但这不会发生。我的正则表达式.IsMatch似乎是成功的,尽管我根据正则表达式不允许X进入。它似乎匹配“200”,然后再没有。奇怪的是,我表示我希望验证完整的输入(请参阅正则表达式末尾的“$”)。

我错过了什么(我猜正则表达式是正确的),但我不希望regex.Ismatch在与完整输入不匹配时成为“成功”。

1 个答案:

答案 0 :(得分:2)

正则表达式元字符|的优先级最低。结果:

^r1|r2$

表示匹配以r1开头或以r2结尾的字符串。

或者

^(r1|r2)$

表示匹配以r1或r2开头和结尾的字符串。

您现有的正则表达式类似于上面的类型1,因为您输入的200正在匹配。要解决此问题,请将您的正则表达式包含在(...)中,如上面的类型2所示。