Die Grundlagen von regulären Ausdrücken und GREP
Der Begriff GREP steht für Global Regular Expression Print. Mithilfe dieses Werkzeugs lassen sich Muster in Texten aufspüren und verändern. Stell es dir wie ein Suchen-und-Ersetzen mit Superkräften vor. In diesem Artikel erfährst du, was GREP kann, was reguläre Ausdrücke sind und warum du beides kennen solltest.
Ein regulärer Ausdruck ist eine Folge von Buchstaben, Ziffern und Zeichen, mit dessen Hilfe sich ein gezieltes Suchmuster beschreiben lässt. Man kann es sich wie eine präzise Suchen-und-Ersetzen-Funktion eines Textverarbeitungsprogramms oder Browsers vorstellen. Reguläre Ausdrücke sind keine eigene Programmiersprache, sondern ein Werkzeug innerhalb diverser Programmiersprachen und Anwendungen. Ihren Ursprung haben reguläre Ausdrücke – die auch regular expressions oder kurz regex genannt werden – in der theoretischen Informatik.
Mitte des 20. Jahrhunderts formalisierte der Mathematiker Stephen Cole Kleene die Beschreibung regulärer Sprachen und ebnete den Weg für den Einsatz regulärer Ausdrücke auf Computern. Doch erst mit dem Erscheinen des Unix-Betriebssystems einige Jahre später erlangten reguläre Ausdrücke eine größere Bedeutung. Ken Thompson, ein US-amerikanischer Informatiker und Miterfinder des Unix-Betriebssystems, integrierte Kleenes Konzept in Unix in Form eines Programms namens GREP. Diese Bezeichnung findet sich auch heute im Suchen-und-Ersetzen-Dialogfeld der populären DTP-Programme InDesign, QuarkXPress und Affinity Publisher wieder.
Über die Jahrzehnte haben immer mehr Programmiersprachen und Programme die Funktionsweise regulärer Ausdrücke übernommen, wobei sich die Syntax in Teilen verändert hat oder aber der Funktionsumfang vergrößert wurde. Die gängigsten Varianten sind heutzutage die POSIX- und Perl-Syntax.
Auch InDesign, QuarkXPress und Affinity Publisher verwenden die Schreibweise der Perl-Syntax, was in der Fachwelt als PCRE oder Perl Compatible Regular Expressions bezeichnet wird.
Gute Typografie durch GREP
Doch was haben reguläre Ausdrücke mit guter Typografie zu tun? Wer ein Buch gestaltet, sieht sich mit der setzerischen Aufgabe konfrontiert, den Text auszuzeichnen, anzugleichen und mikrotypografische Details zu überarbeiten. Dabei geht es immer darum, dem Leser eine möglichst angenehme und strukturierte Darbietung des Textes zu präsentieren, sodass dieser sich im Lesestoff zurechtfindet und der Lesefluss nicht gestört wird. Die Buchstaben sollen dabei wie ein gleichmäßiges Rauschen in den Hintergrund rücken. Wird das Rauschen durch optische Mängel zu laut, rückt es in den Vordergrund und erfordert unsere Aufmerksamkeit – die Informationsaufnahme wird gestört. Eine sorgfältige Überarbeitung des Textes ist aus diesem Grund unabdingbar.
Eine Möglichkeit für den Gestalter, um den Text zu bearbeiten, ist, ihn aufmerksam durchzulesen und in einem linearen Prozess jede Stelle, die eine Korrektur oder Auszeichnung benötigt, manuell zu verbessern. Dies hat den Vorteil, dass der Text von Anfang bis Ende durchgelesen wird und somit keine Stelle ungesehen bleibt. Da aber die Aufmerksamkeit während des gesamten Prozesses auf etliche Faktoren gleichzeitig gerichtet sein muss, ist dieses Vorgehen fehleranfällig. Sicherer ist daher, zusätzlich zum linearen Durchsehen die Suchfunktion des DTP-Programms zu nutzen. Während der Text auf Ungereimtheiten geprüft wird, werden Fehler in einem separaten Dokument notiert. In einem weiteren Schritt können die Stellen, die verändert werden sollen, mithilfe der Suche gezielt angesteuert werden. Doch stößt auch dieses Vorgehen an seine Grenzen, denn eine einfache Suchabfrage kann immer nur ein Stringliteral beschreiben, also eine buchstabengetreue Darstellung einer Zeichenkette. Sucht man beispielsweise ein bestimmtes Wort oder Zeichen, findet man nur die Textstellen, die identisch mit dem Suchbegriff sind.
Sucht man das Wort Buch, findet man alle Textstellen mit ebendiesem Begriff. Zusätzlich werden aber auch alle Stellen gefunden, die den Suchbegriff nur in Teilen enthalten, so z. B. Buchverleih, Buche oder auch Küstenbucht. Möchte man zusätzlich auch alle Vorkommnisse der Pluralform Bücher finden, bedarf es einer weiteren Suchabfrage.
Daher kommt man beim Arbeiten mit der Suche nicht umher, jede Fundstelle zu überprüfen und manuell zu bestätigen. Denn die Suche ist einerseits starr – sie findet Buch, aber nicht Bücher – und auf der anderen Seite unpräzise – sie findet auch Wörter, die den Suchbegriff nur bruchstückhaft enthalten.
Effizienter und präziser Arbeiten mit GREP
Genau hier entfalten reguläre Ausdrücke und GREP ihre Stärken. Anstelle der genauen Zeichenkette des Suchwortes werden sogenannte Meta-Zeichen verwendet. Sie beschreiben den Suchbegriff nicht wortwörtlich, sondern abstrakt. Das erlaubt, den Suchbegriff zu dehnen und ihn zeitgleich zu verfeinern. Alle Probleme des zuvor beschriebenen Beispiels ließen sich mit nur einem regulären Ausdruck beseitigen. Die Zeichenkette \bB(u|ü)ch(er)?\b
beschreibt alle alleinstehenden Vorkommnisse der Wörter Buch und Bücher. Dabei steht \b
für die Wortgrenze, (u|ü)
macht beide Buchstaben austauschbar und (er)?
die Endung optional.
Die Möglichkeit, eine Suche so präzise zu formulieren, dass eine manuelle Überprüfung guten Gewissens oftmals entfallen kann, macht GREP zum idealen Werkzeug für die Textformatierung.
Ebenso mächtig ist der Einsatz von Platzhaltern, auch Wildcards genannt, in GREP. Dabei kann auf ein ganzes Instrumentarium von Zeichenklassen wie Ziffern, Buchstaben, Interpunktionszeichen oder Weißräume zurückgegriffen werden. Ein weiteres Beispiel: Möchte man alle Datumsangaben in einem Text ändern, um nach den Binnen-Punkten einen Zwischenraum einzufügen, kann anstelle eines konkreten Datums nach einem Datumsmuster gesucht werden. Hierfür werden alle Ziffern mit \d
(kurz für Digit) und alle Punkte mit \.
beschrieben. Aus dem 01.01.2021 würde \d\d\.\d\d\.\d\d\d\d
. Alle Daten, die diesem Muster folgen, würden nun gefunden.
Doch gibt es ein lästiges Problem mit Daten – es gibt verschiedene korrekte Schreibweisen. Um auch Daten ohne führende Null sowie zweistellige Jahresangaben abzugleichen, wäre folgende Änderung am regulären Ausdruck notwendig: \d{1,2}\.\d{1,2}\.\d{2,4}
.
Die Zahlen innerhalb der geschweiften Klammern sind sogenannte Quantoren und zeigen an, dass das vorangestellte Zeichen entsprechend oft wiederholt wird. In unserem Beispiel suchen wir demnach nach einem oder optional zwei Ziffern gefolgt von einem Punkt, erneut nach einem oder zwei Ziffern gefolgt von einem Punkt und zuletzt nach zwei oder vier Ziffern.
Angenommen man müsste ein Tagebuch oder Konzertregister mit hunderten von Datumsangaben ohne die Hilfe von regulären Ausdrücken gestalten, wäre eine vollständige und korrekte typografische Überarbeitung langatmig, in jedem Falle mühsam und im Zweifel unmöglich.