1

我正在使用正则表达式来验证公式(类似 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

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

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

4

1 回答 1

2

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

^r1|r2$

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

或者

^(r1|r2)$

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

您现有的正则表达式类似于上面的类型 1,因此200您输入的结果正在匹配。要解决这个问题,请(...)按照上面的类型 2 将您的正则表达式包含在 a 中。

于 2012-07-17T13:31:20.597 回答