O'Reilly logo

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Reguläre Ausdrücke, 3rd Edition

Book Description

Regulaere Ausdruecke sind ein leistungsstarkes Mittel zur Verarbeitung von Texten und Daten. Wenn Sie regulaere Ausdruecke noch nicht kennen, wird Ihnen dieses Buch eine ganz neue Welt er ffnen. Aufgrund der ausgesprochen detaillierten und tiefgruendigen Behandlung des Themas ist dieses Buch aber auch fuer Experten eine wahre Trouvaille.

Die neue Auflage dieses anerkannten Standardwerks behandelt jetzt auch die Unterstuetzung regulaerer Ausdruecke in PHP sowie Suns java.util.regex. Der klare und unterhaltsame Stil des Buchs hat schon Tausenden von Programmierern das an sich trockene Thema naehergebracht, und mit den vielen Beispielen zu Problemen aus dem Programmieralltag ist Regulaere Ausdruecke eine praktische Hilfe bei der taeglichen Arbeit.

Regulaere Ausdruecke sind ueberall

Sie sind standardmaessig in Perl, PHP, Java, Python, Ruby, MySQL, VB.NET und C# (und allen Sprachen des .NET-Frameworks) sowie anderen Programmiersprachen und Werkzeugen eingebaut. Dieses Buch geht detailliert auf die Unterschiede und Gemeinsamkeiten bei der Behandlung regulaerer Ausdruecke in diesen Sprachen und Werkzeugen ein. Besonders ausfuehrlich werden die Regex-Features von Perl, Java, PHP und .NET behandelt.

Regulaere Ausdruecke sind maechtig

Regulaere Ausdruecke sind sehr leistungsf hig und flexibel. Dennoch bleibt ihre Anwendung oft unter ihren Moeglichkeiten. Mit regulaeren Ausdruecken koennen Sie komplexe und subtile Textbearbeitungsprobleme loesen, von denen Sie vielleicht nie vermutet haetten, dass sie sich automatisieren lassen. Regulaere Ausdruecke ersparen Ihnen Arbeit und Aerger, und viele Probleme lassen sich mit ihnen auf elegante Weise loesen.

Regulaere Ausdruecke sind anspru chsvoll

Was in der Hand von Experten eine sehr nuetzliche Faehigkeit ist, kann sich als Stolperstein fuer Ungeuebte herausstellen. Dieses Buch zeigt einen Weg durch das unwaegbare Gebiet und hilft Ihnen, selbst Experte zu werden. Wenn Sie die regulaeren Ausdruecke beherrschen, werden sie zu einem unverzichtbaren Teil Ihres Werkzeugkastens. Sie werden sich fragen, wie Sie je ohne sie arbeiten konnten.

Table of Contents

  1. Reguläre Ausdrücke
    1. Vorwort von Jeffrey Friedl zur deutschen Übersetzung der 1. Auflage
    2. Vorwort
      1. Warum ich dieses Buch geschrieben habe
      2. Zielpublikum
      3. Wie man dieses Buch lesen soll
      4. Der Aufbau des Buches
      5. Typografische Konventionen
      6. Übungsaufgaben
      7. Persönliche Anmerkungen und Dank
    3. 1. Einführung in reguläre Ausdrücke
      1. Probleme aus der Praxis lösen
      2. Reguläre Ausdrücke als Programmiersprache
        1. Die Analogie zu Dateinamen
        2. Die Analogie zu natürlichen Sprachen
          1. Das Ziel dieses Buches
      3. Reguläre Ausdrücke als Denkweise
        1. Wenn Sie Erfahrungen mit regulären Ausdrücken haben
        2. Textdateien durchsuchen: egrep
      4. Metazeichen bei egrep
        1. Zeilenanfang und Zeilenende
        2. Zeichenklassen
          1. Eines von mehreren Zeichen erkennen
          2. Negierte Zeichenklassen
        3. Auf irgendein Zeichen prüfen: der Punkt
        4. Alternation
          1. Auf einen von mehreren Unterausdrücken prüfen
        5. Groß- und Kleinschreibung ignorieren
        6. Wortgrenzen
        7. Kurze Rekapitulation
        8. Optionale Elemente
        9. Andere Quantoren: Repetition
          1. Explizites Minimum und Maximum: Intervalle
        10. Klammern und Rückwärtsreferenzen
        11. Ausbrecher!
      5. Erweiterung der Fundamente
        1. Linguistisches Divertissement
        2. Das Ziel eines regulärers
        3. Weitere Beispiele
          1. Variablennamen
          2. Ein String in Anführungszeichen
          3. Heller und Pfennig
          4. Eine HTTP/HTML-URL
          5. Ein HTML-Tag
          6. Amerikanische Uhrzeiten wie »9:17 am« oder »12:30 pm«
        4. Reguläre Ausdrücke: Terminologie
          1. Regex
          2. Pattern-Matching
          3. Metazeichen
          4. Dialekte
          5. Unterausdruck
          6. Zeichen
        5. Den Status quo verbessern
        6. Zusammenfassung
      6. Persönliche Einsprengsel
    4. 2. Erweiterte einführende Beispiele
      1. Zu den Beispielen
        1. Eine kleine Einführung in Perl
      2. Mustererkennung mit regulären Ausdrücken
        1. Mehr Praxisnähe
        2. Nebeneffekte bei erfolgreicher Mustererkennung
        3. Verschachtelte reguläre Ausdrücke
          1. »Whitespace« mit \s
        4. Rekapitulation
      3. Mit regulären Ausdrücken Text verändern
        1. Programmbeispiel: Serienbrief
        2. Programmbeispiel: Aktienkurse
        3. Automatisiertes Editieren von Dateien
        4. Ein kleines Mail-Programm
          1. Probleme aus der Praxis, praxistaugliche Lösungen
          2. Die wirkliche Praxis
        5. Große Zahlen in Dreiergruppen aufteilen: Lookaround
          1. Lookaround »verbraucht« keinen Text
          2. Weitere Beispiele zum Lookahead
            1. Zusammenfassung »Jeffs«
          3. Zurück zu den Dreiergruppen bei großen Zahlen...
          4. Wortgrenzen und negatives Lookaround
          5. Dreiergruppen ohne Lookbehind
        6. Nackten Text in HTML verwandeln
          1. Sonderbehandlung für bestimmte Zeichen
          2. Text in Abschnitte unterteilen
          3. E-Mail-Adressen »verlinken«
            1. Username und Hostname
            2. Zusammengesetzt
          4. HTTP-URLs »verlinken«
            1. Eine Regex-Sammlung
            2. Warum ›$ und ›@ manchmal maskiert werden müssen
        7. Ein Wiedersehen mit verdoppelten Wörtern
          1. Reguläre Ausdrücke mit Operatoren, Funktionen oder Objekten
    5. 3. Features und Dialekte
      1. In diesem Kapitel
        1. In diesem Kapitel
          1. In diesem Kapitel
      2. Ein Spaziergang durch die Welt der regulären Ausdrücke
        1. Die Ursprünge regulärer Ausdrücke
          1. Metazeichen bei grep
          2. grep entwickelt sich
          3. egrep entwickelt sich
          4. Neue Spezies entstehen
          5. POSIX – ein Standardisierungsversuch
          6. Henry Spencers Regex-Paket
          7. Auch Perl entwickelt sich
          8. Eine Flurbereinigung bei den Regex-Dialekten
          9. Programmversionen in diesem Buch
      3. Wartung und Pflege von regulären Ausdrücken
        1. Integrierter Ansatz
        2. Prozeduraler und objektorientierter Ansatz
          1. Gebrauch von regulären Ausdrücken in Java
            1. Ein prozedurales Beispiel
          2. Reguläre Ausdrücke in VB und anderen .NET-Sprachen
          3. Reguläre Ausdrücke in PHP
          4. Reguläre Ausdrücke in Python
          5. Warum verschiedene Ansätze?
        3. Beispiele mit »Suchen und Ersetzen«
          1. Suchen und Ersetzen in Java
          2. Suchen und Ersetzen in VB.NET
          3. Suchen und Ersetzen in PHP
        4. Suchen und Ersetzen in anderen Sprachen
          1. Awk
          2. Tcl
          3. GNU Emacs
        5. Wartung und Pflege: Zusammenfassung
      4. Strings, Zeichencodierungen und Modi
        1. Strings als reguläre Ausdrücke
          1. Strings in Java
          2. Strings in VB.NET
          3. Strings in C#
          4. Strings in PHP
          5. Strings in Python
          6. Strings in Tcl
          7. Regex-Literale in Perl
          8. Unterstützung von Zeichencodierungen
        2. Unicode
          1. Zeichen und Zeichenkombinationen
          2. Mehrere Codierungspunkte für dasselbe Zeichen
          3. Unicode 3.1+ und Codierungspunkte nach U+FFFF
          4. Das Zeilenende in Unicode
        3. Regex-Modi
          1. Der Modus »Groß- und Kleinschreibung ignorieren«
          2. Der Modus »Freie Form«
          3. Der Modus »Punkt passt auf alles«
            1. Ein unglücklicher Name
          4. Der Modus »Verbesserte Zeilenanker« oder Mehrzeilenmodus
          5. Modus für literalen Text
      5. Übliche Metazeichen
        1. Zeichendarstellung
          1. Abkürzungsmetazeichen
          2. Sind diese Zeichen maschinenabhängig?
          3. Oktale Escapes: \Zahl
          4. Hexadezimale Escapes und Unicode-Escapes: \xZahl, \x{Zahl}, \uZahl, \UZahl, ...
          5. Steuerzeichen – \cZeichen
        2. Zeichenklassen und ähnliche Konstrukte
          1. Normal classes: [a-z] und [^a-z]
            1. Punkt oder negierte Zeichenklasse?
          2. Unicode-Eigenschaften, Schriftsysteme (Scripts) und Blockbereiche: \p{Prop}, \P{Prop}
            1. Schriftsysteme
            2. Blockbereiche
            3. Andere Eigenschaften und Qualitäten
            4. Subtraktion von Zeichenklassen
            5. Mengenoperationen bei Klassen mit Lookaround imitieren
        3. Anker und andere »Zusicherungen der Länge null«
          1. Beginn der neuen (oder Ende der letzten) Mustersuche: \G
            1. Ende der letzten Mustersuche oder Anfang der aktuellen?
        4. Kommentare und Modus-Modifikatoren
        5. Gruppierende und einfangende Klammern, logische und gierige Konstrukte
          1. Gruppierende und einfangende Klammern: (...), \1, \2, ...
            1. Auf einfangende Klammer-Konstrukte prüfen
            2. Auf Lookaround-Konstrukte prüfen
            3. Andere Tests für die Bedingung
            4. Intervalle – {min, max} oder \{min, max\}
      6. Führer durch die Kapitel für Fortgeschrittene
    6. 4. Wie Regex-Maschinen arbeiten
      1. Motor anlassen!
        1. Zwei Arten von Motoren
        2. Kalifornische Abgasvorschriften
        3. Typen von Regex-Maschinen
        4. Aus der Abteilung für Redundanz-Abteilung
        5. Den Typ der Regex-Maschine bestimmen
      2. Grundlegendes zum Vorgang der Mustersuche
        1. Zu den Beispielen
        2. Regel 1: Der am weitesten links beginnende Treffer gewinnt
          1. Das »Getriebe« schaltet zum nächsten Zeichen
            1. Die Hauptaufgabe des Getriebes: Weiterschalten
        3. Bestandteile der Regex-Maschine
          1. »Elektrische« Klammern, Rückwärtsreferenzen oder nicht-gierige Quantoren gibt es nicht
        4. Regel 2: Die normalen Quantoren sind gierig
          1. Ein betreffendes Beispiel
          2. Zu gierig
          3. Wer zuerst kommt, mahlt zuerst
          4. Bis zu den letzten Details
      3. Regex-gesteuerte und textgesteuerte Maschinen
        1. NFA-Maschine: Regex-gesteuert
          1. Vorteile bei NFA-Maschinen: Die Regex hat die Kontrolle
        2. DFA-Maschine: Textgesteuert
        3. Ein erster Vergleich von NFA- und DFA-Maschinen
          1. Auswirkungen für uns als Benutzer
      4. Backtracking
        1. Backtracking wie Hänsel und Gretel
          1. Ein bröckliges Beispiel
        2. Zwei wichtige Regeln beim Backtracking
        3. Gespeicherte Zustände
          1. Ein Treffer ohne Backtracking
          2. Ein Treffer nach einem Backtracking
          3. Ein Fehlschlag
          4. Ein ›genügsamer‹, nicht-gieriger Treffer
        4. Backtracking und Gier
          1. Backtracking beim Stern und beim Plus
          2. Ein größeres Beispiel neu betrachtet
      5. Mehr Gieriges
        1. Probleme durch gieriges Verhalten
        2. Mehrbuchstabige »Anführungszeichen«
        3. Nicht-gierige Quantoren
        4. Gierig oder genügsam – der Treffer geht vor
        5. Gier, Genügsamkeit, Backtracking: Die Essenz
        6. Possessive Quantoren und atomare Gruppen
          1. Atomare Gruppen mit (?>...)
            1. Atomare Gruppen: Die Essenz
            2. Manche Zustände bleiben erhalten
            3. Schnellere Fehlschläge mit atomaren Gruppen
          2. Possessive Quantoren: ?+, *+, ++ und {m,n}+
        7. Backtracking bei Lookaround
          1. Atomare Gruppen mit positivem Lookahead imitieren
        8. Ist die Alternation gierig?
        9. Ausnutzen der geordneten Alternation
          1. Fallen bei geordneter Alternation
      6. NFA, DFA und POSIX
        1. Der »längste früheste Treffer«
          1. Wirklich der längste Treffer
        2. POSIX und der »längste früheste Treffer«
        3. Geschwindigkeit und Effizienz
          1. Effizienz bei DFAs
        4. DFA und NFA im Vergleich
          1. DFA und NFA: Unterschiede bei der Kompilierung
          2. DFA und NFA: Unterschiede in der Geschwindigkeit der Mustererkennung
          3. DFA und NFA: Unterschiede bei den gefundenen Treffern
          4. DFA und NFA: Unterschiede bei den Fähigkeiten
          5. DFA und NFA: Unterschiede bei der Schwierigkeit der Implementation
      7. Zusammenfassung
    7. 5. Regex-Methoden aus der Praxis
      1. Die ausgewogene Regex
      2. Einige kleine Beispiele
        1. Fortsetzungszeilen
        2. Eine IP-Adresse erkennen
          1. Die Umgebung richtig einschätzen
        3. Umgang mit Dateinamen
          1. Verzeichnisangabe aus Pfadnamen entfernen
          2. Dateinamen aus einem Pfadnamen herauslösen
          3. Sowohl Verzeichnis- als auch Dateinamen herauslösen
        4. Verschachtelte Klammerpaare
        5. Ungewollte Treffer vermeiden
        6. Eingefassten Text erkennen
          1. Geschützte Anführungszeichen in Strings in Anführungszeichen zulassen
        7. Erwartete Daten und Annahmen
        8. Leerzeichen am Anfang und am Ende entfernen
      3. Beispiele zu HTML
        1. HTML-Tags erkennen
        2. Einen HTML-Link erkennen
        3. Eine HTTP-URL auseinandernehmen
        4. Einen Hostnamen auf syntaktische Korrektheit prüfen
        5. Eine URL in der Praxis erkennen
      4. Ausführliche Beispiele
        1. Mit den Daten im Takt bleiben
        2. Mit erwarteten Daten im Takt bleiben
        3. Den Takt auch bei Unerwartetem nicht verlieren
        4. Mit \G im Takt bleiben
          1. Dieses Beispiel mit \G im größeren Zusammenhang
        5. CSV-Dateien verarbeiten
          1. Das Getriebe ausschalten
            1. Ein anderer Ansatz
          2. Eine effizientere Regex
          3. Andere CSV-Formate
    8. 6. Die Kunst, reguläre Ausdrücke zu schreiben
      1. Vergleiche und Backtrackings
        1. Vergleiche und Backtrackings
          1. Vergleiche und Backtrackings
          2. Traditioneller NFA und POSIX-NFA
      2. Ein ernüchterndes Beispiel
        1. Eine einfache Änderung – die Schokoladenseite zuerst
        2. Effizient oder korrekt?
        3. Gieriges Verhalten nur lokal zulassen
        4. Zurück zur Realität
          1. »Exponentielle« Mustersuche
      3. Backtracking global betrachtet
        1. Überstunden für den POSIX-NFA
        2. Mehr Arbeit bei einem Fehlschlag
        3. Einschränkendere Formulierung
        4. Alternationen können teuer sein
      4. Benchmarking
        1. Was genau wird da gemessen?
        2. Benchmarks mit PHP
        3. Benchmarks mit Java
        4. Benchmarks mit VB.NET
        5. Benchmarks mit Ruby
        6. Benchmarks mit Python
        7. Benchmarks mit Tcl
      5. Übliche Optimierungen
        1. Umsonst gibt's nichts!
        2. Jeder macht's ein bisschen anders
        3. Wie ein regulärer Ausdruck angewendet wird
        4. Optimierungen vor der eigentlichen Suche
          1. Kompilations-Caching
            1. Kompilations-Caching beim integrierten Ansatz
            2. Kompilations-Caching beim prozeduralen Ansatz
            3. Kompilations-Caching beim objektorientierten Ansatz
          2. Suche nach einzelnen Zeichen oder festen Substrings
          3. Optimierung »Test auf Mindestlänge«
        5. Optimierungen mit dem Getriebe
          1. Optimierungen mit Zeilen- und String-Ankern
          2. »Implizite Zeilenanker«-Optimierung
          3. Optimierung mit dem Anker für das String- bzw. Zeilenende
          4. »Erstes Zeichen«-Optimierung
          5. Optimierung mit literalen Strings mitten im Text
          6. Längenerkennung beim Getriebe
        6. Optimierungen der Regex-Maschine
          1. Verketten von Literalen
          2. Optimierung »Einfache Quantoren«
          3. Entfernen von unnötigen Klammern
          4. Entfernen von unnötigen Zeichenklassen
          5. Das Zeichen nach einem nicht-gierigen Quantor
          6. Erkennung von »übermäßigem« Backtracking
          7. Vermeidung von exponentiellem (super-linearem) Verhalten
          8. Löschen von unnötigen abgespeicherten Zuständen mit possessiven Quantoren
          9. Kleine Quantoren
          10. Welche Resultate der Mustersuche werden tatsächlich gebraucht?
      6. Programmiermethoden für schnellere Ausdrücke
        1. Gesunden Menschenverstand anwenden
          1. Neukompilierung vermeiden
          2. Nicht-einfangende Klammern verwenden
          3. Keine unnötigen Klammern
          4. Keine unnötigen Zeichenklassen
          5. Anker ganz am Anfang der Regex verwenden
        2. Literalen Text herausstellen
          1. Mindestanzahl bei Quantoren ausklammern
          2. Gemeinsame Teile der Alternation ausklammern
        3. Anker herausstellen
          1. ^ oder \G am Anfang eines Ausdrucks ausklammern
          2. $ am Ende des Ausdrucks ausklammern
        4. Gierig oder genügsam?
        5. Aufteilen in mehrere reguläre Ausdrücke
        6. Die »Erstes Zeichen«-Optimierung imitieren
          1. Tun Sie das nicht mit Tcl!
          2. Tun Sie das nicht mit PHP!
        7. Atomare Gruppen und possessive Quantoren verwenden
        8. Die Regex-Maschine zum Treffer hinführen
          1. Die wahrscheinlichste Alternative zuerst
          2. Am Ende der Alternation nicht ausklammern
            1. Diese Optimierung kann gefährlich sein
      7. Die Schleife aufbrechen
        1. Methode 1: Eine Regex anhand früherer Erfahrungen aufbauen
          1. Allgemeines Vorgehen beim Aufbrechen von Schleifen
        2. Ein Rezept zum Aufbrechen von Schleifen
          1. Ewiges Matching vermeiden
            1. Der Anfang von ›speziell‹ und ›normal‹ darf nicht gleich sein
            2. ›Speziell‹ muss mindestens ein Zeichen erkennen
            3. ›Speziell‹ muss atomar sein
          2. Generelle Warnsignale
        3. Methode 2: Die kritische Schleife im größeren Zusammenhang betrachten
        4. Methode 3: Ein Internet-Hostname in Anführungszeichen
        5. Beobachtungen
          1. Nachteile
            1. Nachteile
            2. Vorteile
        6. Atomare Gruppen und possessive Quantoren verwenden
          1. Ewiges Matching mit possessiven Quantoren vermeiden
          2. Ewiges Matching mit atomaren Klammern vermeiden
        7. Beispiele zum Aufbrechen von Schleifen
          1. »Mehrbuchstabige« Anführungszeichen
          2. Aufbrechen der Schleife bei Fortsetzungszeilen
          3. Aufbrechen der Schleife bei CSV-Daten
        8. C-Kommentare aufbrechen
          1. Aufbrechen oder nicht ...
            1. Augenschmerzen
          2. Ein direkter Ansatz
          3. Reparatur
          4. Die C-Schleife aufbrechen
          5. Zurück in die Realität
      8. Die frei fließlende Regex
        1. Eine helfende Hand führt die Maschine
        2. Eine gut geführte Regex ist eine schnelle Regex
        3. Zusammenfassung
      9. Denken!
    9. 7. Perl
      1. In diesem Kapitel
        1. In diesem Kapitel
          1. In diesem Kapitel
          2. Perl in den früheren Kapiteln
      2. Reguläre Ausdrücke als Teil der Programmiersprache
        1. Perls größte Stärken
        2. Perls größte Schwächen
      3. Perls Regex-Dialekt
        1. Regex-Operanden und Regex-Literale
          1. Eigenschaften von Regex-Literalen
          2. Begrenzungszeichen für den Regex-Operanden
        2. Wie Regex-Literale geparst werden
        3. Regex-Modifikatoren
      4. Perliges über reguläre Ausdrücke
        1. Kontext bei Ausdrücken
          1. Einen Ausdruck zurechtbiegen
        2. Dynamische Geltungsbereiche: Auswirkungen auf die Mustererkennung
          1. Regex-Nebeneffekte und dynamische Geltungsbereiche
          2. Dynamischer und lexikalischer Geltungsbereich
        3. Durch das Matching gesteuerte Spezialvariablen
      5. Der qr/.../-Operator und Regex-Objekte
        1. Regex-Objekte aufbauen und verwenden
          1. Match-Modifikatoren bleiben kleben
        2. Regex-Objekte anschauen
        3. Regex-Objekte zur Effizienzsteigerung
      6. Der Match-Operator
        1. Der Regex-Operand
          1. Mustersuche mit einem Regex-Literal
          2. Mustersuche mit einem Regex-Objekt
          3. Voreinstellung bei einem leeren Regex-Operanden
          4. Spezielle »Nur Einmal«-Mustersuche mit ?...?
        2. Der Suchtext-Operand
          1. Der Standardsuchtext $_
          2. Das Resultat der Mustersuche negieren
        3. Verschiedene Einsatzmöglichkeiten des Match-Operators
          1. »Passt das?« – Skalarer Kontext ohne /g
          2. Daten aus dem Suchstring herauspflücken – Listenkontext ohne /g
          3. Alle Treffer herauspflücken – Listenkontext mit dem /g-Modifikator
          4. Die »aktuelle Position« und die pos()-Funktion
          5. Aktuelle Position im String mit poss etzen
          6. Gebrauch von \G
          7. Jedes Text-Element einzeln erkennen mit /gc
          8. Zusammenfassung: pos() und verwandte Bereiche
        4. Beziehungen des Match-Operators zum Umfeld
          1. Nebeneffekte des Match-Operators
          2. Einflüsse von außen auf den Match-Operator
          3. Was ist das für ein Kontext?
      7. Der Substitutionsoperator
        1. Der Ersatztext-Operand
        2. Der /e-Modifikator
          1. Mehrfacher Gebrauch von /e
        3. Kontext und Rückgabewert
      8. Der Split-Operator
        1. Grundlegendes zu split
          1. Die einfache Form des Match-Operanden
          2. Der Suchtext-Operand
          3. Einfache Formen des Limit-Operanden
          4. Komplexes Splitting
        2. split kann leere Elemente zurückgeben
          1. Leere Elemente am Ende
          2. Ein zweiter Job für den Limit-Operanden
          3. Besonderes Verhalten der Regex am Stringanfang
        3. Spezielle Formen des Regex-Operanden bei split
          1. split hat keine Nebeneffekte
        4. Der Regex-Operand mit einfangenden Klammern
      9. Verrückte Dinge mit den Regex-Erweiterungen in Perl
        1. Verschachtelte Paare mit dynamischen regulären Ausdrücken erkennen
        2. Perl-Code in der Regex
          1. Codemuster, die während der Mustersuche Informationen ausgeben
          2. Mit Codemustern alle möglichen Treffer ausgeben
          3. Den längsten Treffer finden
          4. Den läfrühesten Treffer finden
            1. Perl-Code in einem bedingten Regex-Konstrukt
        3. Mit Codemustern verschachtelte Konstrukte erkennen
        4. Überladen von Regex-Literalen
          1. Metazeichen für Wortanfang und Wortende einbauen
          2. Possessive Quantoren in Perl nachbilden
        5. Probleme beim Überladen von Regex-Literalen
        6. Benannte Unterausdrücke imitieren
      10. Effizienz in Perl
        1. »There's More Than One Way To Do It«
        2. Regex-Kompilierung, der /o-Modifikator, qr/.../ und Effizienz
          1. Interne Vorgänge beim Vorbereiten einer Regex
          2. Wie Perl Regex-Kompilierungen vermeidet
            1. Caching
            2. Neukompilierung nur bei Bedarf
          3. Der /o-Modifikator: »Nur einmal kompilieren«
            1. Mögliche Fallen beim /o-Modifikator
          4. Regex-Objekte zur Effizienzsteigerung
            1. Regex-Objekte mit m/.../ verwenden
          5. Gebrauch der voreingestellten Regex zur Effizienzsteigerung
          6. Die Kopie des Suchstrings wird für $1, $&, $', $+ ...benötigt
          7. Die Kopie des Suchstrings wird nicht immer benötigt
          8. Wie teuer ist die Kopie des Suchstrings?
          9. Kopieren des Suchstrings vermeiden
            1. »Unartige« Variablen vermeiden
            2. »Unartige« Madule Vermeiden
        3. Die Funktion Study
          1. Wann sollte man study nicht benutzen?
          2. Wo kann study wirklich helfen?
        4. Benchmarks
        5. Debugging-Informationen zu regulären Ausdrücken
          1. Debugging-Informationen zur Laufzeit
          2. Debugging-Informationen auf andere Art ausgeben
      11. Abschließende Betrachtungen
    10. 8. Java
      1. In diesem Kapitel
        1. In diesem Kapitel
          1. In diesem Kapitel
      2. Der Regex-Dialekt von Java
        1. Unterstützung von \p{...} und \P{...} in Java
        2. Unicode-Eigenschaften
          1. Unicode-Blockbereiche
            1. Besondere »Java»-Eigenschaften
          2. Zeilenendezeichen in Unicode
      3. Verwendung von java.util.regex
      4. Die Factory-Methode Pattern.compile
        1. Die matcher-Methode
      5. Das Matcher-Objekt
        1. Die Regex anwenden
        2. Resultate abfragen
          1. Programmbeispiel: Match-Resultate
        3. Einfaches Suchen und Ersetzen
          1. Beispiele für einfaches Suchen und Ersetzen
          2. Der Ersatztext
        4. Suchen und Ersetzen im Detail
          1. Beispiele für Suchen und Ersetzen
        5. Direktes Suchen und Ersetzen
        6. Die Region des Matchers
          1. Merkpunkte
          2. Setzen und Abfragen der Regionsgrenzen
          3. Über die Region hinausblicken
          4. Durchsichtige Regionsgrenzen
          5. Anker-Grenzen (anchoring bounds)
        7. Verketten von Methoden
        8. Methoden zum Bau von Scannern
          1. Beispiele mit hitEnd und requireEnd
          2. Der hitEnd-Bug und wie man ihn umschifft
            1. Wie man den Fehler umgeht
        9. Weitere Matcher-Methoden
          1. Den Suchtext des Matchers abfragen
      6. Weitere protect Pattern-Methoden
        1. Die split-Methode mit einem Argument
          1. Leere Elemente bei aufeinanderfolgenden Treffern
        2. Die split-Methode mit zwei Argumenten
          1. split mit einem Limit kleiner als null
          2. split mit einem positiven Limit
      7. Weitere Programmbeispiele
        1. Hinzufügen von WIDTH- und HEIGHT-Attributen zu IMG-Tags in HTML
        2. Ein Matcher zum Prüfen von HTML mit mehreren Pattern
        3. Daten im CSV-Format verarbeiten
      8. Unterschiede zwischen den Java-Versionen
        1. Unterschiede zwischen Java 1.4.2 und 1.5.0
          1. Neue Methoden in Java 1.5.0
          2. Unterschiede bezüglich Unicode zwischen Java 1.4.2 und 1.5.0
        2. Unterschiede zwischen Java 1.5.0 und 1.6
    11. 9. .NET
      1. In diesem Kapitel
        1. In diesem Kapitel
          1. In diesem Kapitel
      2. Der Regex-Dialekt in .NET
        1. Weitere Anmerkungen zum .NET-Dialekt
          1. Benannte Klammerausdrücke
            1. Eine unglückliche Auswirkung
          2. Bedingte Klammerausdrücke
          3. Optimierte Ausdrücke mit »Compiled«
          4. Mustersuche von rechts nach links
          5. Zweideutigkeiten mit Backslash und Ziffern
          6. ECMAScript-Modus
      3. Gebrauch von regulären Ausdrücken in .NET
        1. Ganz kurz: Regulüre Ausdrücke in .NET
          1. Ganz kurz: Passt die Regex?
          2. Ganz kurz: Mustersuche und Treffertext
          3. Ganz kurz: Mustersuche mit eingefangenem Text
          4. Ganz kurz: Suchen und Ersetzen
        2. Überblick
          1. Den Regex-Namensraum importieren
        3. Das Objekt-Modell in .NET – Überblick
          1. Regex-Objekte
          2. Group-Objekte
          3. Capture-Objekte
          4. Alle Resultate werden beim Match berechnet
      4. Die Objekte im Detail
        1. Regex-Objekte erzeugen
          1. Ausnahmen abfangen
          2. Regex-Optionen
        2. Regex-Objekte verwenden
          1. Gebrauch von Ersatztext-Delegates
        3. Match-Objekte verwenden
        4. Group-Objekte verwenden
      5. Statische »Komfort-Funktionen«
        1. Caching von regulären Ausdrücken
      6. Hilfsfunktionen
      7. Fortgeschrittenes mit regulären Ausdrücken in .NET
        1. Regex-Assemblies
        2. Verschachtelte Konstrukte erkennen
        3. Capture-Objekte
    12. 10. PHP
      1. In diesem Kapitel
        1. In diesem Kapitel
          1. In diesem Kapitel
          2. Hintergrund und historische Entwicklung
      2. Der Regex-Dialekt von PHP
      3. Die >preg<-Programmierschnittstelle
        1. Der »Pattern«-Parameter
          1. Strings in Hochkommas in PHP
          2. Begrenzungszeichen
          3. Pattern-Modifikatoren
            1. Modifikatoren innerhalb der Regex
            2. Modifikatoren außerhalb der Regex
            3. PHP-spezifische Modifikatoren
      4. Die Preg-Funktionen
        1. preg_match
        2. preg_match_all
        3. preg_replace
        4. preg_replace_callback
        5. preg_split
        6. preg_grep
        7. preg_quote
      5. »Fehlende« preg-Funktionen
        1. preg_regex_to_pattern
          1. Das Problem
          2. Die Lösung
        2. Ein Pattern-Argument auf korrekte Syntax prüfen
        3. Eine Regex auf korrekte Syntax prüfen
      6. Rekursive reguläre Ausdrücke
        1. Text mit verschachtelten Klammern parsen
          1. Rekursiver Aufruf mit nummerierten Klammern
          2. Rekursiver Aufruf mit benannten Klammern
          3. Ergänzendes zu possessiven Quantoren
        2. Kein Backtracking mitten in die Rekursion
        3. Ein verschachteltes Klammerpaar finden
      7. Überlegungen zur Effizienz
        1. Der S-Modifikator
          1. Normale Optimierung ohne den S-Modifikator
          2. Verbesserte Optimierung mit dem S-Modifikator
          3. Wann bringt der S-Modifikator nichts?
          4. Wann soll der S-Modifikator verwendet werden?
      8. Ausführliche Beispiele
        1. CSV-Dateien mit PHP verarbeiten
        2. Tags auf korrekte Verschachtelung prüfen
          1. Die Kern-Regex in diesem Ausdruck
            1. Zweite Alternative: Text ohne Tags
            2. Dritte Alternative: Leere Elemente in Kurzschreibweise
            3. Erste Alternative: Elemente mit öffnenden und schließenden Tags
          2. Possessive Quantoren
          3. XML in der Praxis
          4. Geht das auch mit HTML?
    13. Über den Übersetzer
    14. Kolophon