Gierigen Regex in nicht-gierigen umwandeln

NicoRyl

Mitglied
Hallo zusammen.

Da es für Regex hier keine Sparte gibt, dachte ich mir ich schreibe mal hier rein.
Ich möchte meinen regulären Ausdruck gerne in einen 'nicht-gierigen' Regex umwandeln. Bis jetzt ist er noch sehr gierig und braucht sehr lange pro Operation.
Weiß jemand, wie man das macht? Vielen Dank schonmal im Voraus!

Code:
^SELECT\s+(\*??[A-Za-z0-9,\s]*?)\s+FROM\s+[A-Za-z0-9]+(\s+WHERE\s+([A-Za-z0-9])+\s+([=<>]|LIKE)\s['][A-Za-z0-9\s]+['])??;$
 
Ich setze mich damit derzeit auch auseinander und möchte mal einen Pin setzen, um die Antwort nicht zu verpassen.
Liebe Grüße
 
Reguläre Ausdrücke in Java werden in eine interne Datenstruktur kompiliert. Diese Kompilierung ist der zeitaufwändige Prozess. Zur Optimierung ist es möglich, zuerst das Muster zu kompilieren und immer wieder zu verwenden. Eine weiter Optimierung ist die Verwendung der gleichen Matcher-Instanz mit ihrer reset()-Methode. Aufgrund der Tatsache, dass Matcher nicht thread-sicher ist, muss man mit der Verwendung dieser Variante vorsichtig sein. Sie könnte in Multi-Thread-Szenarien gefährlich sein.
 
Nur mal so geschwafelt:

Gierig heisst, das der reguläre Ausdruck alles bis zum Ende erkennt, dann aber wieder erkannte Teile zurück gibt, damit die weiter rechts stehenden Pattern eventuell auch passen.

Da würde ich denken, dass man dem gierigen Teil damit hilft, dass man Treffer für den Folgeteil ausschliesst.

Die Feldliste (Projektion) ist beispielsweise mit Kommas getrennt. Also eigentlich 'Leerzeichen*,Leerzeichen*'.

Dagegen ist FROM von der Feldliste nur mit Leerzeichen getrennt. Also darf kein Leerzeichenbereich ohne Komma auftauchen.

Wenn man alle in Frage kommenden Feldnamen der Feldliste kennt und diese als ODER-Pattern (ich nehme an, jeweils in Klammern und dann noch irgendwie ver-odert), dann hält die Erkennung der Feldliste beim Auftauchen des FROM an.

Wie gesagt, nur so geschwafelt um im Gespräch zu bleiben.
 
Zuletzt bearbeitet:

Zurück
Oben