Gierig oder genügsam?

(Auszug aus "Reguläre Ausdrücke" von Jeffrey E. F. Friedl)

Normalerweise ergibt sich aus der Aufgabenstellung, ob gierige oder nicht-gierige Quantoren verwendet werden müssen. Zum Beispiel unterscheidet sich ˹^.*:˼ sehr von ˹^.*?:˼. Der erste Ausdruck erkennt alles bis zum letzten Doppelpunkt, der zweite nur bis zum ersten. Wenn wir aus anderen Gründen wissen, dass in den Daten genau ein Doppelpunkt vorkommen kann, dann sind die Ausdrücke effektiv gleichwertig (sie erkennen »alles bis zum Doppelpunkt«), und es ist dann möglich, die schnellere Variante zu wählen.

Welches aber die schnellere Variante ist, ist nicht immer offensichtlich. Wenn der Doppelpunkt bei einem langen Suchstring am Anfang auftritt, wird er mit dem nicht-gierigen Quantor schneller gefunden; wenn der Doppelpunkt erst gegen Ende vorkommt, ist die Version mit dem gierigen Quantor schneller. Wenn Sie nichts über die zu erwartenden Daten wissen (außer natürlich, dass nur genau ein Doppelpunkt auftritt), dann ist normalerweise das gierige Konstrukt schneller, besonders, wenn die Optimierung mit dem Zeichen nach einem nicht-gierigen Quantor (siehe dazu Das Zeichen nach einem nicht-gierigen Quantor) nicht möglich ist.

Bei kürzeren Suchstrings ist die Situation noch weniger klar. Einerseits spielt die Optimierung bei kurzen Strings eine geringe Rolle, wenn es aber wirklich darauf ankommt, das Letzte herauszuholen, müssen Sie die zwei Versionen mit den entsprechenden Daten einem Benchmark-Test unterziehen.

Eine ähnliche Frage ergibt sich beim Abwägen zwischen einem nicht-gierigen Quantor und einer negierten Zeichenklasse. ˹^.*?:˼ und ˹^[^:]*:˼ haben die gleiche Wirkung; aber welcher Ausdruck ist schneller? Auch das hängt einerseits von den Daten und andererseits von der Programmiersprache ab. In den meisten Fällen ist die negierte Zeichenklasse viel schneller als das nicht-gierige Konstrukt. In Perl setzt in diesem Fall die Optimierung Zeichen nach einem nicht-gierigen Quantor ein, daher ist das Ergebnis bei Perl umgekehrt.

  

<< zurück vor >>

 

 

 

Tipp der data2type-Redaktion:
Zum Thema Reguläre Ausdrücke bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:
   

Copyright der deutschen Ausgabe © 2008 by O’Reilly Verlag GmbH & Co. KG
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "Reguläre Ausdrücke" denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

O’Reilly Verlag GmbH & Co. KG, Balthasarstr. 81, 50670 Köln