Hintergrundinformationen und Hilfstools

Reguläre Ausdrücke
Kommentare

Was haben Perl, Java, VB.NET, C#, PHP, Python, Ruby und MySQL, gemeinsam? Sie alle haben reguläre Ausdrücke inzwischen standardmäßig integriert. Reguläre Ausdrücke sind ein effizientes und elegantes Mittel zur Verarbeitung von Texten und Daten. In diesem Artikel sollen Hintergrundinformationen zu regulären Ausdrücken gegeben werden. Vorgestellt werden zudem einige Hilfstools, die beim Entwickeln und bei der Fehlersuche behilflich sein können.

Als Erfinder von regulären Ausdrücken gilt Stephen C. Kleene (1909-1994). Kleene ist einer der Mitbegründer der theoretischen Informatik und benötigte eine Notation, um bestimmte Mengen darstellen zu können. Sein Konzept – von ihm noch reguläre Mengen genannt – fand Einzug in den Softwarebereich, als die Texteditoren QED und ed von Ken Thompson diese regulären Ausdrücke, wie sie später genannt werden sollten, unterstützten. Dieses Beispiel machte Furore, sodass unter Unix und später auch Linux viele weitere Tools die regulären Ausdrücke nach und nach einbauten. In Hinblick auf Programmiersprachen machte Perl den ersten Schritt und ermöglichte es Entwicklern, reguläre Ausdrücke direkt innerhalb der Sprache zu verwenden.

Muster

Doch was ist ein regulärer Ausdruck? Ein solcher beschreibt – zumindest für unsere Zwecke – ein Muster. Ein typisches Muster wäre in umgangssprachlicher Form beispielsweise „optional ein D und ein Bindestrich, danach fünf Ziffern“. Dieses Muster beschreibt eine deutsche Postleitzahl, mit oder ohne Länderkürzel. Für internationale Postleitzahlen müsste das Muster anders und vor allem allgemeiner aufgebaut werden: „ein paar Großbuchstaben (das Länderkürzel), ein Bindestrich, dies alles optional; danach beliebig viele Ziffern, aber mindestens eine“.

Natürlich kann eine Programmiersprache nur relativ schlecht mit solchen umgangssprachlichen Beschreibungen umgehen. Deswegen gibt es eine spezielle Notation, beispielsweise die erste Beschreibung für eine deutsche Postleitzahl samt optionalem Länderkürzel:

Reguläre Ausdrücke von Christian Wenz

Dieser Onlineartikel ist ein Auszug aus dem Buch „Reguläre Ausdrücke“ von Christian Wenz, das bei entwickler.press erschienen ist. Sie können das Buch im Onlineshop von entwickler.press erwerben.

entwickler-press.de

So weit gehen andere Programmiersprachen nicht; mittlerweile unterstützen aber alle relevanten Sprachen reguläre Ausdrücke, vielleicht nicht so direkt wie Perl, aber trotzdem über eine Handvoll einfach zu erreichender Funktionen oder Methoden. Da reguläre Ausdrücke nicht standardisiert sind, kochte eine Zeit lang jeder Hersteller (einer Programmiersprache oder eines Tools mit Unterstützung für reguläre Ausdrücke) sein eigenes Süppchen. Zunächst gibt es die Urform der regulären Ausdrücke, noch nahe an der einstigen Notation von Kleene. Diese Notation wurde vom POSIX-Standard abgelöst.

Durchgesetzt hat sich aber mittlerweile eine andere Variante, die auf den Namen PCRE hört. Das Akronym steht für Perl Compatible Regular Expressions und ist eine Syntaxvariante von regulären Ausdrücken, die sich an der Perl-Implementierung orientiert. Die PCRE-Variante ist etwas mächtiger als die POSIX-Variante und hat sich deswegen etabliert; die meisten Programmiersprachen unterstützen PCRE inzwischen. Einige, wie etwa PHP, bieten beides: POSIX und PCRE. Dort zeigen allerdings Performance-Vergleiche, dass die PCRE-Ausdrücke häufig schneller sind als die äquivalenten POSIX-Ausdrücke. Außerdem wird PCRE aktiv weiterentwickelt (vor allem in Hinblick auf die Bibliotheken, die PCRE-Unterstützung für andere Technologien anbieten). Dennoch lässt sich ein allgemeines Pauschal-Urteil nur sehr schwer fällen; im Zweifel entscheidet immer nur eine Prototyp-Implementierung der aktuellen Anwendung, welche Variante die bessere ist.

(D)?[0-9]{5}

Dieser Ausdruck kann auch auf diverse andere Arten dargestellt werden, etwa so:

(D)?ddddd

Ein Aspekt von regulären Ausdrücken ist die Suche nach einem Muster – im vorherigen Beispiel also: Passt das Muster auf eine vorliegende Zeichenkette? Die obigen Muster kommen beispielsweise in der Zeichenkette (String) D-60599 Frankfurt vor, nicht jedoch in A-8010 Wien. Ein weiterer Aspekt von regulären Ausdrücken ist das Ersetzen. Nicht nur, dass ein Muster gefunden werden soll, danach soll es auch durch etwas anderes ersetzt werden.

Tools

An sich sind reguläre Ausdrücke eine recht trockene Angelegenheit. Denn richtig sinnvoll sind sie nicht auf sich gestellt, sondern nur im Kontext einer Anwendung. Um das nachzuvollziehen, haben Sie mehrere Möglichkeiten. Entweder Sie verwenden Ihre Lieblingsprogrammiersprache und schreiben ein paar Testprogramme. Oder Sie verwenden einige Hilfstools, die sowohl bei der Erstellung regulärer Ausdrücke hilfreich sein können als auch bei der Muster- und Fehlersuche unterstützen.

Das Lieblingstool des Autors hat zunächst zwei Nachteile: Es ist kostenpflichtig und es läuft nur unter Windows. Dennoch, das Geld ist (subjektive Meinung!) gut angelegt. Der RegexBuddy hilft nicht nur beim Erstellen eines regulären Ausdrucks, indem die Auswirkung des Ausdrucks automatisch beschrieben wird, sondern bietet auch eine Testmöglichkeit an: Sie können einen Text eingeben, und wird das aktuelle Muster gefunden, gibt Regex-Buddy an, wo es sich befindet.

Abb. 1: RegexBuddy in Aktion

Außerdem gibt es eine in die Software eingebundene Bibliothek mit zahlreichen vorgefertigten regulären Ausdrücken für verschiedene Anwendungsszenarien. Diese vorgefertigten Ausdrücke können überaus komplex werden, wie Abbildung 1.2 zeigt.

Abb. 2: Die in RegexBuddy integrierte Bibliothek

Unter http://www.regexbuddy.com/ finden Sie leider nicht wie sonst üblich eine zeitbeschränkte Testversion zum Download, sondern nur allgemeine Informationen. Sie können die Software natürlich auch erwerben (immerhin mit Geld-Zurück-Garantie).

Ganz gratis geht es auch und sogar etwas systemunabhängiger. Unter http://weitz.de/regex-coach/ finden Sie den Regex Coach von Edi Weitz, eine Anwendung die neben Windows immerhin auch noch Linux unterstützt. Eine Mac-Version gab es sogar auch einmal (als Beta), sie hat aber nie sonderlich gut funktioniert und wurde mittlerweile leider wieder eingestellt.

Abb. 3: Regex Coach in Aktion

Obwohl der Regex Coach gratis ist, bittet der Autor trotzdem um Spenden – wenn Ihnen die Software gefällt, ist das eine Frage des guten Stils. Natürlich gibt es noch weitere Tools, Tutorials und Websites zu dem Thema; eine recht gute Übersicht finden Sie in Wikipedia unter http://en.wikipedia.org/wiki/Regular_Expression#Tools.

Christian Wenz ist Autor, Trainer und Berater mit Schwerpunkt auf Webtechnologien. Er schreibt regelmäßig für verschiedene Fachzeitschriften und spricht auf Konferenzen im In- und Ausland.
Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -