我正在使用正则表达式来验证公式(类似 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 在与完整输入不匹配时“成功”。