Einstieg in Reguläre Ausdrücke

Inhaltsverzeichnis
1.

Einstieg in Reguläre Ausdrücke

Michael Fitzgerald

Thomas Demmig

Inhalt

Vorwort

Wer dieses Buch lesen sollte

Was Sie für dieses Buch benötigen

Typographische Konventionen

Danksagung

1. Was ist ein regulärer Ausdruck?

Ein Anfang mit Regexpal

Eine nordamerikanische Telefonnummer finden

Ziffern mit einer Zeichenklasse finden

Ein Zeichenkürzel verwenden

Beliebige Zeichen finden

Gruppen und Rückwärtsreferenzen

Quantoren einsetzen

Einfassende Literale

Eine Beispielanwendung

Was Sie in Kapitel 1 gelernt haben

Technische Hinweise

2. Einfache Muster finden

Stringliterale finden

Ziffern finden

Etwas anderes als Ziffern finden

Wort- und Nicht-Wortzeichen finden

Whitespace finden

Beliebige Zeichen finden – Zweite Runde

Text mit Markup versehen

Text mit sed mit Markup versehen

Markup mit Perl einfügen

Was Sie in Kapitel 2 gelernt haben

Technische Hinweise

3. Grenzen

Anfang und Ende einer Zeile

Wort- und Nicht-Wortgrenzen

Andere Anker

Eine Gruppe von Zeichen als Literale markieren

Tags hinzufügen

Tags mit sed hinzufügen

Tags mit Perl hinzufügen

Was Sie in Kapitel 3 gelernt haben

Technische Hinweise

4. Alternation, Gruppen und Rückwärtsverweise

Alternation

Untermuster

Einfangende Gruppen und Rückwärtsverweise

Benannte Gruppen

Nicht-einfangende Gruppen

Atomare Gruppen

Was Sie in Kapitel 4 gelernt haben

Technische Hinweise

5. Zeichenklassen

Negierte Zeichenklassen

Vereinigung und Differenz

POSIX-Zeichenklassen

Was Sie in Kapitel 5 gelernt haben

Technische Hinweise

6. Unicode- und andere Zeichen finden

Ein Unicode-Zeichen finden

Einsatz von vim

Zeichen mit Oktalzahlen finden

Eigenschaften von Unicodezeichen finden

Steuerzeichen finden

Was Sie in Kapitel 6 gelernt haben

Technische Hinweise

7. Quantoren

Gierig, genügsam und possessiv

Mit *, + und ? finden

Eine bestimmte Anzahl finden

Genügsame Quantoren

Possessive Quantoren

Was Sie in Kapitel 7 gelernt haben

Technische Hinweise

8. Lookarounds

Positive Lookaheads

Negative Lookaheads

Positive Lookbehinds

Negative Lookbehinds

Was Sie in Kapitel 8 gelernt haben

Technische Hinweise

9. Ein Dokument mit HTML-Markup versehen

Tags finden

Reinen Text mit sed umformen

Mit sed ersetzen

Römische Zahlen mit sed verarbeiten

Einen bestimmten Absatz mit sed verarbeiten

Die Zeilen des Gedichts mit sed verarbeiten

Tags anfügen

Eine Befehlsdatei bei sed einsetzen

Reinen Text mit Perl umwandeln

Römische Zahlen mit Perl verarbeiten

Einen bestimmten Absatz mit Perl verarbeiten

Die Zeilen des Gedichts mit Perl verarbeiten

Eine Befehlsdatei mit Perl einsetzen

Was Sie in Kapitel 9 gelernt haben

Technische Hinweise

10. Das Ende vom Anfang

Mehr erfahren

Interessante Tools, Implementierungen und Bibliotheken

Perl

PCRE

Ruby (Oniguruma)

Python

RE2

Eine nordamerikanische Telefonnummer finden

Eine E-Mail-Adresse finden

Was Sie in Kapitel 10 gelernt haben

A. Reguläre Ausdrücke – Referenz

Reguläre Ausdrücke in QED

Metazeichen

Zeichenkürzel

Whitespace

Whitespace-Zeichen in Unicode

Steuerzeichen

Zeicheneigenschaften

Schriftsystem-Namen für Zeicheneigenschaften

POSIX-Zeichenklassen

Optionen/Modifikatoren

ASCII-Codetabelle mit Regex

Technische Hinweise

Glossar zu regulären Ausdrücken

Index

Kolophon

Vorwort

Dieses Buch zeigt Ihnen anhand von Beispielen, wie Sie reguläre Ausdrücke schreiben. Ziel ist, das Erlernen von regulären Ausdrücken so einfach wie möglich zu machen. Tatsächlich stellt dieses Buch nahezu jedes Konzept anhand von Beispielen vor, so dass Sie es leicht selbst ausprobieren können.

Reguläre Ausdrücke helfen Ihnen dabei, Muster in Textstrings zu finden. Genauer gesagt, handelt es sich dabei um Textstrings mit einer bestimmten Syntax, die auf Muster in Strings passen – meist aus Dokumenten oder Dateien.

Reguläre Ausdrücke fanden Verbreitung, nachdem der Mathematiker Stephen Kleene sein Buch Introduction to Metamathematics schrieb (New York, Van Nostrand). Es wurde erstmals 1952 veröffentlicht, auch wenn die Konzepte aus den frühen 1940er Jahren stammten. Mit dem Aufkommen des Unix-Betriebssystems hatten die Informatiker bessere Möglichkeiten, es einzusetzen – dank der Arbeit von Brian Kernighan, Dennis Ritchie, Ken Thompson und anderen an den AT&T Bell Labs sowie von Tools wie sed und grep in den frühen 1970er Jahren.

Der erste Einsatz regulärer Ausdrücke, den ich in einem Computerprogramm finden konnte, war im QED-Editor. Der QED – Abkürzung von Quick Editor – war für das Berkeley-Timesharing-System geschrieben worden, das auf dem Scientific Data Systems SDS 940 lief. Im Jahr 1970 dokumentiert, handelte es sich um eine Neuauflage (von Ken Thompson) eines früheren Editors auf dem MIT Compatible-Time-Sharing-System. Hier fand sich eine der ersten praktikablen Implementierungen regulärer Ausdrücke auf einem Computer. (Tabelle A.1 in Anhang A beschreibt die Regex-Features von QED.)

Ich werde eine ganze Reihe von Tools nutzen, um die Beispiele zu demonstrieren. Sie werden sie hoffentlich nützlich und hilfreich finden. Andere Tools habe ich nicht eingesetzt, weil sie nicht einfach auf Ihrem Windows-System zu nutzen sind. Sie können diejenigen überspringen, die Ihnen nicht praktisch genug erscheinen oder die Sie optisch nicht ansprechen. Aber ich empfehle jedem, der ernsthaft im Computerumfeld tätig sein will, reguläre Ausdrücke in einer Unix-basierten Umgebung zu erlernen. Ich arbeite in dieser Umgebung seit 25 Jahren und lerne immer noch jeden Tag etwas Neues.

»Diejenigen, die Unix nicht verstehen, sind dazu verdammt, es neu zu erfinden – nur schlechter.«

Henry Spencer

Einige der Tools, die ich Ihnen zeigen werde, stehen online über einen Webbrowser zur Verfügung. Das dürfte für die meisten Leser am einfachsten sein. Andere nutzen Sie von der Befehlszeile aus und ein paar laufen auf dem Desktop. Die Tools lassen sich leicht herunterladen, wenn Sie sie noch nicht besitzen. Der Großteil davon ist kostenlos oder sehr günstig.

Dieses Buch kümmert sich nicht allzu sehr um Begrifflichkeiten. Ich werde Ihnen bei Bedarf die notwendigen Begriffe erklären, aber nur in kleinen Dosen. Ich habe diesen Weg gewählt, weil ich im Laufe der Jahre festgestellt habe, dass Fachbegriffe häufig zu Verständnisproblemen führen. Mit anderen Worten: Ich werde Sie möglichst nicht mit dem trockenen Fachvokabular behelligen, das reguläre Ausdrücke beschreibt. Denn die Idee dieses Buches ist, dass man nützliche Dinge schon erledigen kann, bevor man alles über ein bestimmtes Thema weiß.

Es gibt viele verschiedene Implementierungen regulärer Ausdrücke. Sie finden sie in Unix-Befehlszeilentools wie vi (vim), grep und sed. Es gibt reguläre Ausdrücke in Programmiersprachen wie Perl (natürlich), Java, JavaScript, C# oder Ruby und vielen weiteren, und sie finden sich in deklarativen Sprachen wie XSLT 2.0. Auch gibt es sie in Anwendungen wie Notepad++, Oxygen oder TextMate.

Die meisten dieser Implementierungen haben Gemeinsamkeiten und Unterschiede. Ich werde in diesem Buch nicht auf alle Unterschiede eingehen, aber die wichtigsten werden erwähnt. Wenn ich versuchen würde, alle Unterschiede zwischen allen Implementierungen zu dokumentieren, müsste ich mich danach vermutlich einweisen lassen. In diesem Buch werde ich auf diese Art von Details nicht allzu sehr eingehen. Sie erwarten wie angekündigt eine Einführung in das Thema – und die erhalten Sie auch.

Wer dieses Buch lesen sollte

Zielgruppe dieses Buchs sind Leute, die noch nie zuvor einen regulären Ausdruck geschrieben haben. Kennen Sie sich mit regulären Ausdrücken oder der Programmierung noch nicht aus, ist dieses Buch ein guter Ausgangspunkt. Mit anderen Worten: Ich schreibe für den Leser, der schon von regulären Ausdrücken gehört hat und interessiert daran ist, aber der sie noch nicht versteht. Wenn Sie sich in dieser Beschreibung wiederfinden, ist dieses Buch für Sie genau richtig.

Wir gehen Schritt für Schritt vor und bewegen uns von einfachen hin zu komplexen Themen.

Haben Sie schon ein wenig über reguläre Ausdrücke und ihren Einsatz gelernt oder sind Sie ein erfahrener Programmierer, ist dieses Buch vielleicht nicht unbedingt der richtige Einstiegspunkt für Sie. Es handelt sich um Einsteigerbuch, bei dem dem Leser ein wenig die Hand gehalten werden soll. Haben Sie schon reguläre Ausdrücke geschrieben und sind vertraut mit ihnen, kann auch Ihnen dieses Buch eine Hilfe sein, aber ich werde vermutlich langsamer vorgehen, als Sie sich das wünschen.

Ich empfehle als Folgeliteratur eine Reihe von Büchern. Schauen Sie sich als erstes Reguläre Ausdrücke, 3. Auflage von Jeff Friedl an (siehe http://www.oreilly.de/catalog/regex3ger). Friedls Buch behandelt die regulären Ausdrücke sehr umfassend und ich empfehle es sehr. Auch möchte ich Ihnen das Reguläre Ausdrücke Kochbuch (siehe http://www.oreilly.de/catalog/regexcbger) von Jan Goyvaerts und Steven Levithan ans Herz legen. Jan Goyvaerts ist der Entwickler von RegexBuddy, einer leistungsfähigen Desktopanwendung (siehe http://www.regexbuddy.com/). Steven Levithan hat RegexPal geschrieben, einen Online-Prozessor für reguläre Ausdrücke, den Sie im ersten Kapitel dieses Buches einsetzen werden (siehe http://www.regexpal.com).

Was Sie für dieses Buch benötigen

Um dieses Buch möglichst sinnvoll einsetzen zu können, benötigen Sie Zugriff auf Tools, die auf Unix- oder Linux-Betriebssystemen bereitstehen, wie zum Beispiel Darwin auf dem Mac, einer Variante von BSD (Berkeley Software Distribution) auf dem Mac, oder Cygwin auf einem Windows PC, das in seiner Distribution viele GNU-Tools mitbringt (siehe http://www.cygwin.com und http://www.gnu.org).

Es gibt viele Beispiele, die Sie ausprobieren können. Wenn Sie wollen, schauen Sie sie sich nur an, aber um richtig etwas daraus zu lernen, müssen Sie soviele wie möglich selbst nutzen. Denn meiner Meinung nach lernt man am besten, indem man mitmacht und nicht, indem man nur zuschaut. Sie lernen Websites kennen, auf denen Sie durch farbliche Hervorhebungen erkennen, welche Textabschnitte erkannt wurden. Ich stelle Ihnen Befehlszeilen-Tools aus der Unix-Welt und Desktop-Anwendungen vor, die reguläre Ausdrücke analysieren oder sie einsetzen, um Texte zu durchsuchen.

Sie werden Beispiele aus diesem Buch auf Github unter https://github.com/michaeljamesfitzgerald/Introducing-Regular-Expressions finden. Eine Zusammenstellung all der Beispiele und Testdateien aus diesem Buch finden Sie zum Herunterladen auch unter http://examples.oreilly.com/9781449392680/examples.zip. Es wäre am besten, Sie erstellen ein Verzeichnis auf Ihrem Computer und laden dann diese Dateien in den Ordner herunter, bevor Sie richtig in das Buch einsteigen.

Typographische Konventionen

In diesem Buch werden die folgenden typographischen Konventionen befolgt:

Kursiv

Steht für neue Begriffe, URLs, E-Mail-Adressen, Dateinamen, Dateierweiterungen und so weiter.

Nichtproportionalschrift

Wird für Programmcode (auch innerhalb von Absätzen) genutzt, um auf Programmelemente wie Ausdrücke und Befehlszeilen oder andere Elemente zu verweisen.

Tipp

Dieses Symbol steht für einen Tipp, einen Vorschlag oder eine allgemeine Anmerkung.

Danksagung

Erneut möchte ich mich bei meinem Lektor Simon St. Laurent bei O'Reilly bedanken, einem sehr geduldigen Menschen, ohne den dieses Buch nie das Licht der Welt erblickt hätte. Danke sehr auch an Seara Patterson Coburn und Roger Zauner für eure hilfreichen Korrekturen. Und wie immer möchte ich mich bei Cristi, der Liebe meines Lebens, bedanken, die mein Raison d’être ist.