Regex-Methoden aus der Praxis

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

Sie kennen jetzt die Grundlagen zum Schreiben von regulären Ausdrücken. Jetzt möchte ich dies anwenden und mit weiterführenden Methoden komplexere Ausdrücke konstruieren. Bei jeder Regex gibt es eine delikate Balance zwischen dem Finden von erwünschten Treffern und dem Ablehnen dessen, was nicht passen soll. Sie haben bereits einige Beispiele kennengelernt, bei denen wir das gierige Verhalten zum eigenen Nutzen anwenden konnten, wir haben aber auch einige mögliche Fehlerquellen dabei gesehen; solche Beispiele gibt es in diesem Kapitel wieder.

Bei einer NFA-Maschine gehört auch die Effizienz der Mustersuche zu dieser Balance – das ist vor allem unter Die Kunst, reguläre Ausdrücke zu schreiben ein Thema. Eine schlecht konzipierte Regex – auch eine, die an sich korrekt ist – kann eine Mustersuche enorm verlangsamen.

Dieses Kapitel besteht vornehmlich aus Beispielen, die generelle Überlegungen bei der Problemlösung veranschaulichen sollen. Sie sind deshalb auch dann nützlich, wenn das behandelte Problem für Ihre aktuelle Arbeit (noch) nicht von Belang ist.

Auch wenn Sie z.B. nichts mit HTML zu tun haben, können die HTML-Beispiele dennoch hilfreich sein. Das Schreiben von guten regulären Ausdrücken ist nicht nur eine Fertigkeit, es ist eine kleine Kunstform. Um in dieser Kunst zur Meisterschaft zu gelangen, reicht es nicht, ein paar Regeln auswendig zu lernen, dazu bedarf es längerer Übung. Die Beispiele sind Illustrationen zu den Erfahrungen, die ich über die Jahre mit regulären Ausdrücken gemacht habe.

Sie brauchen Ihre eigenen Erfahrungen, um das Gelernte zu verstehen und zu absorbieren, und ich hoffe, dass die Beschäftigung mit meinen Beispielen dazu beiträgt.

Die ausgewogene Regex

Um gute reguläre Ausdrücke zu schreiben, bedarf es einer Ausgewogenheit zwischen verschiedenen und teilweise antagonistischen Zielen. Ein guter regulärer Ausdruck muss folgende Kriterien erfüllen:

  • Die Regex soll genau das finden, was Sie suchen, und nichts anderes.
  • Die Regex soll verständlich und leicht zu warten sein.
  • Bei einem NFA soll die Regex effizient sein (schnell zu einem Treffer bzw. zu einem Fehlschlag führen).

Diese Anforderungen sind oft von der Umgebung abhängig. Wenn ich auf der Eingabezeile nur schnell etwas »greppen« will, um mir einen Überblick zu verschaffen, ist es mir meist egal, ob eine Zeile zu viel ausgegeben wird; also verwende ich kaum Zeit darauf, exakt die richtige Regex zu formulieren. Ich erlaube mir Nachlässigkeiten, um Zeit zu sparen und weil ich mir die ausgegebenen Zeilen sowieso selbst ansehe. Wenn ich dagegen an einem wichtigen Skript arbeite, ist die Zeit, eine Regex genau richtig zu formulieren, gut investiert: Wenn das Problem eine komplizierte Regex erfordert, dann muss sie auch so geschrieben werden. Man muss lernen, diese verschiedenen Aspekte unter einen Hut zu bringen.

Sogar in einem Programm sind Effizienz-Überlegungen von der Umgebung abhängig. Eine lange Alternation zum Prüfen von Argumenten von der Befehlszeile – wie zum Beispiel ˹^-(display|geometry|cemap|...|quick24|random|raw)$˼ – ist für einen NFA wenig erfreulich, aber da es nur um Argumente geht (etwas, das nur einmal in einem Programm ausgeführt wird), spielt es keine Rolle, ob es hundertmal langsamer abläuft als die schnellstmögliche Version. Wenn der Ausdruck dagegen auf jede Zeile einer möglicherweise großen Datei angewendet wird, dann wirkt sich die Ineffizienz hier auf das ganze Programm aus.

  

  

<< 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