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
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.
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).
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.
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.
Dieses Symbol steht für einen Tipp, einen Vorschlag oder eine allgemeine Anmerkung.
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.