如何使用正则表达式验证线性方程式,或者除了使用正则表达式之外还有其他方法。我将使用^来表示指数。
2x + 3 = 8 //这应该验证
3x + 2y + 4z = 12 //这应该验证
4x ^ 2 + 2y = 22 //由于功率的原因,这不应该验证。
4xy + 3y = 45 //由于两个未知数的乘积,这不应该验证。
2 / x + 4y = 22 //由于分母
中未知,因此无法验证(3/4)x + 3y + 2z = 40 //这应该可以验证。
答案 0 :(得分:1)
您提到的案例很简单:
fail if /[xyz]\s*\^/;
fail if /\/\s*[xyz]/;
fail if /([xyz]\s*){2,}/;
(这是Perl语法,假设$_
包含表达式,而fail
就是你想要放弃时所做的一切。)
在这里,您可以将xyz
替换为一个变量的有效表达式。
但是一般来说这需要实际解析表达式,这是lex / yacc或类似的工作,而不是正则表达式。
例如,如果“xy”是一个合法的变量名,那么当然这一切都会崩溃。
答案 1 :(得分:1)
我首先使用Backus-Naur符号编写有效线性方程的定义,例如:
<integer> := <digit> | <integer> <digit>
<constant> := <integer> | ...
<variable> := <letter>
<term> := <constant> | <variable> | <constant> <variable>
等等。
有很多方法可以将其转换为验证器。有一些经验,我会使用yacc或bison来编写一个解析器,如果输入是一个有效的线性方程,它只会生成一个解析树。
您可能会发现正则表达式太有限,无法满足您的需求 - 我只是不会使用它们来了解它们。