Nicht-Reguläre Ausdrücke
-
Hallo,
Folgendes Problem: für einen Ausdruck, der aus Klammern ( ) und anderen Zeichen besteht, soll zu einer gegebenen öffnenden Klammer "(" die *zugehörige* schließende Klammer ")" gefunden werden.
Beispiel: Zur Eingabe (abc(de)(f)) soll der Inhalt des äußersten Klammerpaares, also abc(de)(f) ausgegeben werden.
Problem: Mit puren regulären Ausdrücken scheint das nicht zu gehen. Schließlich ist die Sprache aller wohlgeformten Klammerausdrücke nicht regulär, sondern kontextfrei. Gibt es in einer der in Frage kommenden Sprachen awk/sed/bash/python/ruby (notfalls auch C/C++) eine elegante Methode oder gar eingebaute Funktion zum Erkennen zusammengehöriger Klammern ? Oder zum automatischen Extrahieren des Klammerinhalts, selbst wenn weitere Klammerebenen dazwischenliegen, wie im Beispiel ?
[Natürlich läßt sich das Problem in jeder Sprache mittels eines Zählers lösen, der bei "(" eins hochzählt und bei ")" eins herunterzählt; bei Erreichen der Null ist die Klammer gefunden. Aber ich frage mich, ob es nicht noch eine einfachere Möglichkeit gibt, die mit "Bordmitteln" auskommt, ohne den beschriebenen Zählmechanismus implementieren zu müssen]
Grüße
-
du kannst ein regexp machen welches eine start klammer und eine end klammer sucht, aber keine andere klammer beinhalten darf, mit funktion wie preg_replace_callback kannst du dann rekrusiv dein string durchgehen und das gefundene löschen und noch mal suchen lassen usw.
wenn du das gelöschte anderweitig sammelst hast du dein ergebniss
ist wahrscheinich langsamer als deine methode mit den zählen und selbst für dich in einer woche nicht mehr verständlich