Dies sind zum Beispiel gültige mathematische Ausdrücke:
a * b + c
-a * (b / 1.50)
(apple + (-0.5)) * (boy - 1)
Und das sind ungültige mathematische Ausdrücke:
--a *+ b @ 1.5.0 // two consecutive signs, two consecutive operators, invalid operator, invalid number
-a * b + 1) // unmatched parentheses
a) * (b + c) / (d // unmatched parentheses
Ich habe kein Problem mit dem Abgleich von Float-Zahlen, aber ich habe Schwierigkeiten mit dem Abgleich von Klammern. Irgendeine Idee? Wenn es eine bessere Lösung als den regulären Ausdruck gibt, bin ich auch einverstanden. Aber regex wird bevorzugt.
\========
Bearbeiten:
Ich möchte einige Anmerkungen zu meiner Wahl der "akzeptierten Antwort" machen, in der Hoffnung, dass Leute, die die gleiche Frage haben und diesen Thread finden, nicht in die Irre geführt werden.
Es gibt mehrere Antworten, die ich für "akzeptiert" halte, aber ich habe keine Ahnung, welche die beste ist. Deshalb habe ich die akzeptierte Antwort (fast) zufällig ausgewählt. Ich empfehle, neben der akzeptierten Antwort auch die Antwort von Guillaume Malartre zu lesen. Sie alle bieten praktische Lösungen für meine Frage. Für eine etwas strengere/theoretische Antwort lesen Sie bitte David Thornleys Kommentare unter der akzeptierten Antwort. Wie er erwähnte, macht Perls Erweiterung des regulären Ausdrucks (der aus der regulären Sprache stammt) diesen "unregelmäßig". (Ich habe in meiner Frage keine Sprache erwähnt, so dass die meisten Antwortenden von der Perl-Implementierung des regulären Ausdrucks ausgingen - wahrscheinlich die am weitesten verbreitete Implementierung. Das dachte ich auch, als ich meine Frage stellte.)
Bitte berichtigen Sie mich, wenn ich oben etwas Falsches gesagt habe.