如何使用正则表达式验证数学公式表达式
问题描述:
我正在寻找使用正则表达式的数学公式验证。 下面是我使用的示例代码: -如何使用正则表达式验证数学公式表达式
string equation = "(a+b)*10";
bool b = false;
Regex rx = new Regex(@"^((?<o1>[^-+*/()]+|\([^-+*/()]+\)|(?<p>\()+[^-+*/()]+|[^-+*/()]+(?<-p>\)))[-+*/])+(?<o2>[^-+*/()]+|\([^-+*/()]+\)|(?<p>\()+[^-+*/()]+|[^-+*/()]+(?<-p>\)))(?(p)(?!))$");
if (rx.IsMatch(equation))
{
b = true;
}
它工作正常与用于类似的表述“(A + B)×100”。我的意思是如果我错误地放置了诸如“(a + b))* 100”或“(a + b * 100”或“(a + b)* 100)”的花括号,那么它会进行完美的验证。但是,如果去引入我的用户定义的函数,如“Sum(1,2)”或Sqrt(8),则无法验证。
我想这也验证我的功能。像“Sum(1,2)”,“Sum(1,2”,“Sum1,2)”,“Sum(1,2))”一样。我的意思是它应该照顾正确使用大括号。
注意: - 我正在使用ANTLR创建这些功能。
谢谢
答
通用的数学公式太复杂,不能用正则表达式解析。使用ANTLR编写一个可以解析出单个元素的语法。
数学表达式不是常规语法,不能使用正则表达式进行分析 – Eric 2013-02-13 07:56:13
您正在使用哪种语言运行该正则表达式? – Eric 2013-02-13 07:58:26
@Eric我正在使用C# – Girish 2013-02-13 09:23:05