0

如何使用正则表达式验证线性方程,或者除了使用正则表达式之外还有其他方法。我将使用 ^ 来表示指数。

2x + 3 = 8 //这应该可以很好地验证

3x + 2y + 4z = 12 //这应该可以验证

4x^2 + 2y = 22 //这不应该验证,因为权力。

4xy + 3y = 45 //这不应该验证,因为两个未知数的乘积。

2/x + 4y = 22 //这不应该验证,因为分母中的未知数

(3/4)x + 3y + 2z = 40 //这应该可以验证。

4

2 回答 2

1

您提到的案例很简单:

fail if /[xyz]\s*\^/;
fail if /\/\s*[xyz]/;
fail if /([xyz]\s*){2,}/;

(这是 Perl 语法,假设$_包含表达式,并且fail当你想放弃时,无论你做什么。)

在这里,您可以用xyz一个变量的有效表达式替换。

但一般来说,这将需要对表达式进行实际解析,这是 lex/yacc 或类似的工作,而不是正则表达式。

例如,如果“xy”是一个合法的变量名,那么当然这一切都会崩溃。

于 2009-10-15T04:23:30.513 回答
1

我首先使用Backus-Naur表示法编写有效线性方程的定义,例如:

<integer> := <digit> | <integer> <digit>
<constant> := <integer> | ...
<variable> := <letter>
<term> := <constant> | <variable> | <constant> <variable>

等等。

有很多方法可以将其变成验证器。有了一些经验,我会使用 yacc 或 bison 编写一个解析器,如果输入是一个有效的线性方程,它只会生成一个解析树。

您可能会发现正则表达式太有限而无法满足您的需求——我只是没有使用它们来了解它们。

于 2009-10-15T04:29:13.707 回答