Frage

Wie kann ich lineare Gleichungen mit regulären Ausdrücken zu validieren oder gibt es eine andere Art und Weise reguläre Ausdrücke neben der Verwendung. Ich verwende ^ einen Exponenten zu bezeichnen.

2x + 3 = 8 // Dies sollte in Ordnung bestätigen

3x + 2y + 4z = 12 // Das sollte in Ordnung bestätigen

4x ^ 2 + 2y = 22 // Dies sollte nicht wegen der Macht validieren.

4xy + 3y = 45 // Dies sollte nicht wegen des Produkts von zwei Unbekannten validieren.

2 / x + 4j = 22 // Dies sollte nicht wegen der unbekannten im Nenner bestätigt

(3/4) x + 3y + 2z = 40 // Das sollte in Ordnung validieren.

War es hilfreich?

Lösung

Ich würde zunächst eine Definition einer gültigen linearen Gleichung zu schreiben mit Backus -Naur Notation, mit Dingen wie:

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

und so weiter.

Es gibt viele Möglichkeiten, dass in einen Prüfer zu drehen. einige Erfahrung mit ihm zu haben, ich yacc oder Bison verwenden würde, einen Parser zu schreiben, die nur einen Parse-Baum, wenn die Eingabe eine gültige lineare Gleichung war erzeugen würden.

Sie können reguläre Ausdrücke zu finden sind zu begrenzt, um zu tun, was Sie brauchen -. Ich sie nicht nur verwenden genug, um zu wissen,

Andere Tipps

Die Fälle, die Sie erwähnt haben, sind einfach:

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

(dies ist Perl-Syntax, unter der Annahme, $_ den Ausdruck enthält, und fail ist, was auch immer es ist, dass Sie tun, wenn Sie aufgeben wollen.)

Hier können Sie xyz mit ersetzen, was auch immer ist ein gültiger Ausdruck für eine Variable.

Aber im Allgemeinen wird diese tatsächliche Analyse des Ausdrucks erfordern, was ein Job für lex / yacc oder so ähnlich, keine regulären Ausdruck.

Zum Beispiel, wenn „xy“ ist ein legitimer Variablenname, dann natürlich diese alle bröckeln.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top