Moin Moin,
ich hab vor kurzem angefangen mich etwas mit regular Expressions zu beschäftigen.
Ich habe nun versucht, simple matehmatische Eingaben zu prüfen und zu zerlegen. Sowas wie 2 + 2, 5 - 3 usw. sind überhaupt kein Problem.
Ich bin soweit, dass diese Eingabe: -0.5 + 3 + (-5 / (2+1) + 100) gut funktioniert, und ich mit preg_match_all alles das so herausbekomme was ich möchte. Bei den Klammern hab ich mir das so überlegt, dass die komplette Klammer genommen wird, wieder auf klammern geprüft wird und diese von innen nach außen aufgelöst werden.
Im Array sieht das dann so aus:
In der Funktion dazu wird im 5. Element dann die Klammer entfernt und das ganze neu betracht. Das funktioniert.
Diesen Ausdruck hab ich dafür geschrieben:
In der ersten Bedingung sag ich ja, dass alles innerhalb der Klammern sein darf, war ein erster Versuch und hat bei dem Beispiel oben auch funktioniert.
Wenn aber nun zwei klammern enthalten sind dann wird es problematisch.
Bei dieser Eingabe wird es schwierig für mich: (5 * 5) + (3 * 5).
Das Array daraus ist das:
Es wird von "(" bis ")" erkannt, und natürlich alles dazwischen kommt mit. Es sollten aber eigentlich 3 Elemente sein "(5 * 5)", "+" und "(3 * 5)".
Da aber Klammern in den Klammern erlaubt sein soll kam ich auf die Idee zu prüfen ob es ").*(" gibt, bzw. nicht gibt mit [^\(.*\)]. Aber leider ohne Erfolg
Hat da jemand einen Tipp für mich? wäre cool!
Gruß
ich hab vor kurzem angefangen mich etwas mit regular Expressions zu beschäftigen.
Ich habe nun versucht, simple matehmatische Eingaben zu prüfen und zu zerlegen. Sowas wie 2 + 2, 5 - 3 usw. sind überhaupt kein Problem.
Ich bin soweit, dass diese Eingabe: -0.5 + 3 + (-5 / (2+1) + 100) gut funktioniert, und ich mit preg_match_all alles das so herausbekomme was ich möchte. Bei den Klammern hab ich mir das so überlegt, dass die komplette Klammer genommen wird, wieder auf klammern geprüft wird und diese von innen nach außen aufgelöst werden.
Im Array sieht das dann so aus:
Code:
array(5) { [0]=> string(4) "-0.5" [1]=> string(1) "+" [2]=> string(1) "3" [3]=> string(1) "+" [4]=> string(18) "(-5 / (2+1) + 100)" }
Diesen Ausdruck hab ich dafür geschrieben:
Code:
#(\(.*\))|(-?\d*\.\d+)|(-?\d+)|([\+\-\*/x])#
Wenn aber nun zwei klammern enthalten sind dann wird es problematisch.
Bei dieser Eingabe wird es schwierig für mich: (5 * 5) + (3 * 5).
Das Array daraus ist das:
Code:
array(1) { [0]=> string(17) "(5 * 5) + (3 * 5)" }
Da aber Klammern in den Klammern erlaubt sein soll kam ich auf die Idee zu prüfen ob es ").*(" gibt, bzw. nicht gibt mit [^\(.*\)]. Aber leider ohne Erfolg
Hat da jemand einen Tipp für mich? wäre cool!
Gruß
Kommentar