Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Reguläre Ausdrücke: Verschachtelte Klammern (https://www.delphipraxis.net/60893-regulaere-ausdruecke-verschachtelte-klammern.html)

JocalAreaNetwork 13. Jan 2006 19:15


Reguläre Ausdrücke: Verschachtelte Klammern
 
Hallo,

ich bin auf ein Problem mit einem regulären Ausdruck gestoßen und wäre dankbar, wenn jemand eine Lösung parat hat, oder wenigstens weiß, dass das mit regulären Ausdrücken nicht zu lösen ist.

Mein Problem bezieht sich auf mathematische Terme, in welchen ich Produkte, die einen Faktor 0 im Term haben, komplett mit 0 ersetzen will. Wenn ich nun also einen String 4*5*0*2*(4+5(5+4)) betrachte, dann ist dies absolut kein Problem, der Ausdruck findet es. Bei folgendem Term geht es nun jedoch nicht mehr:

4*0*(5+4)+4*(2+1)

Es liegt daran, dass der Ausdruck nicht erkennt, wann die letzte Klammer aufhört. Hier mit dem ? Operator zu arbeiten macht ebenfalls keinen Sinn, da ich ja Klammern beliebig tief verschachteln kann. Kann man irgendwie dem Ausdruck beibringen, dass er also im Prinzip zählt, wie viele Klammern geöffnet wurden und wie viele geschlossen werden müssen? Ich würde gerne (5+4) einfach wegfallen lassen können, nur leider könnte dieser Faktor ja auch (5+4(3+45)) sein.

Viele Grüße
JocalAreaNetwork

Chewie 13. Jan 2006 19:36

Re: Reguläre Ausdrücke: Verschachtelte Klammern
 
Wenn du jemals eine Vorlesung zum Thema Theoretische Informatik hören wirst, wirst du erfahren, dass es verschiedene Arten von Sprachen (in der Chomsky-Hierarchie) gibt.

Die oberste Stufe sind die Typ3-Sprachen oder auch reguläre Sprachen. Reguläre Ausdrücke sind eine Methode, um solche Sprachen zu beschreiben.
Klammerstrukturen sind genau der Grund, weshalb man zu Typ2-Sprachen (oder auch kontextfreien Sprachen) übergeht: Sie können mit regulären Sprachen nicht beschrieben werden.


Lange Redem kurzer Sinn: Du wirst etwas anderes brauchen, um solche Ausdrücke zu beschreiben. Strkturbäume oder Kellerautomaten könnten das Mittel deiner Wahl sein.

alcaeus 13. Jan 2006 19:50

Re: Reguläre Ausdrücke: Verschachtelte Klammern
 
Du koenntest jedes Klammernset, welches keine anderen klammern beinhaltet, schon mal aufloesen. Dies machst du in einer Schleife so lange, bis im gesamten Ausdruck keine Klammern mehr da sind ;)

Greetz
alcaeus

JocalAreaNetwork 13. Jan 2006 20:12

Re: Reguläre Ausdrücke: Verschachtelte Klammern
 
@Chewie: Danke dir, das bringt mich weiter. Ich werte es dann wohl ähnlich lösen, wie ich es momentan bereits bei meiner Termauswertung machen muss, nämlich den String langsam rekursiv zerlegen. Trotzdem wäre es interessant etwas über die von dir angesprochenen Verfahren herauszufinden. Gibt es da eventuell eine Umsetzung auch für Delphi, am besten mit einer generellen Einführung?

Ich wäre dir sehr verbunden. :)

Grüße
JocalAreaNetwork


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:31 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz