Formale Sprachen und Automaten

Ähnliche Dokumente
/ Software Freedom Day

Formale Sprachen und Automaten

Empfehlenswerte Referenzen

1.103 Regular Expressions - Reguläre Ausdrücke

6 F O R M A L E S P R A C H E N. 6.1 formale sprachen

Regular Expressions. Daniel Lutz Was ist eine Regular Expression?

Reguläre Ausdrücke - eine Einführung -

Wiederholung. Ein deterministischer endlicher Automat (DEA) über einem Alphabet A besteht aus: einer endlichen Menge von Zuständen Q,

Theoretische Informatik. Reguläre Sprachen und Automaten

Grundbegriffe der Informatik Tutorium 2

Webengineering. Reguläre Ausdrücke. Dienstag, 2. Juli 13

Reguläre Ausdrücke mit Java

Grundbegriffe der Informatik

Alphabet, formale Sprache

Dateisystem 2, Suchen & Finden

Formale Sprachen. Anwendungen formaler Sprachen Adressen, Kaffeeautomaten, Programmiersprachen. Rudolf Freund, Marian Kogler

Sebastian Harl. 03. Oktober 2008

Benutzung der Manpage, Shell Teil 3

Theorie der Informatik

Grundbegriffe der Informatik

Ferdinand Beyer. 1 Allgemeines Beschreibung Bezeichnungen Einsatzgebiete in UNIX-Tools Notationsarten...

Reguläre Sprachen und endliche Automaten

Informationsextraktion Materialien zur Vorlesung

Einführung in die Computerlinguistik Suche mit regulären Ausdrücken

Reguläre Ausdrücke in Oracle 10g Waren Queries bis jetzt irregulär?

Reguläre Ausdrücke. Felix Döring, Felix Wittwer 14. November Python-Kurs

SelfLinux Reguläre Ausdrücke

Institut fu r Informatik

Motivation. Formale Grundlagen der Informatik 1 Kapitel 5 Kontextfreie Sprachen. Informales Beispiel. Informales Beispiel.

Programmiersprachen und Übersetzer

Dateisystem 2, Suchen & Finden, Manpages

Reguläre Ausdrücke Suchmuster, Pattern Matching

Es gibt viele Programme, die mit regulären Ausdrücken arbeiten:

Reguläre Ausdrücke. Karin Haenelt

Automaten und Formale Sprachen

Reguläre Ausdrücke. Prof.Dr.Christian Wagenknecht mit Beiträgen von Herrn Dr.Michael Hielscher

1 Syntax von Programmiersprachen

Einleitung. liefert Ihnen alle Dateien, die mit.txt enden. Oder dir bericht??.txt

Einführung in PERL 2 Reguläre Ausdrücke

Grundbegriffe der Informatik

Kapitel 2: Formale Sprachen Gliederung. 0. Grundbegriffe 1. Endliche Automaten 2. Formale Sprachen 3. Berechnungstheorie 4. Komplexitätstheorie

Kapitel 3: Reguläre Grammatiken und Endliche. Automaten

Formale Methoden 1. Gerhard Jäger 16. Januar Uni Bielefeld, WS 2007/2008 1/19

Definition (Reguläre Ausdrücke) Sei Σ ein Alphabet, dann gilt: (ii) ε ist ein regulärer Ausdruck über Σ.

Theoretische Grundlagen des Software Engineering

Formale Sprachen, reguläre und kontextfreie Grammatiken

Regexp Reguläre Ausdrücke

11 Fallstudie: Reguläre Ausdrücke

GREP. Reguläre Ausdrücke. GREP Hardcore. Syntax. Ersetzen Suchen. Look Around. 20. April 2012 Pubkon 2013

b{2} [^b]{2} Reguläre Ausdrücke als Hilfsmittel der Textanalyse Manuel Raaf Bayerische Akademie der Wissenschaften, IT-Referat

Objektorientierte Programmierung. Kapitel 3: Syntaxdiagramme und Grammatikregeln

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen. I.2. I.2. Grundlagen von von Programmiersprachen.

Werkzeuge der Informatik UNIX

Reguläre Ausdrücke. AnPr

17 R E L AT I O N E N

Kapitel 4. Einführung in den Scannergenerator Flex. Einführung in den Scannergenerator Flex Wintersemester 2008/09 1 / 9

Grundbegriffe der Informatik

Arbeiten mit Regulären Ausdrücken. Annette Gerstenberg Würzburg, 16. März 2016 Workshop "Digitale Methoden" beim Forum Junge Romanistik

C. Ortseifen: Reguläre Ausdrücke

Grundlagen der Theoretischen Informatik

äußere Klammern können entfallen, ebenso solche, die wegen Assoziativität von + und Konkatenation nicht notwendig sind:

Übungsaufgaben zu Formalen Sprachen und Automaten

Theoretische Informatik. Alphabete, Worte, Sprachen

Übung zur Vorlesung Theoretische Information. Pumping Lemma

Grundbegriffe der Informatik

Fachhochschule Frankfurt am Main Fachbereich 2: Informatik WS 2008/2009

Reguläre Ausdrücke. Silke Trißl, Prof. Ulf Leser Wissensmanagement in der Bioinformatik

Einführung in die Theoretische Informatik

C/C++ Programmierung

Theoretische Informatik 2

Theoretische Grundlagen der Informatik

Compilerbau I Sommersemester 2008

Programmieren I. Formale Sprachen. Institut für Angewandte Informatik

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

b2boptic / SF7 Freiburg

Grundlagen der Theoretischen Informatik Musterlösungen zu ausgewählten Übungsaufgaben

Grafische Interaktionssysteme/ dynamische Visualisierung des endlichen Automaten

Sprachbeschreibung und Erweiterung

7 Endliche Automaten. Reimund Albers Papierfalten Kapitel 7 Endliche Automaten 103

Übungspaket 23 Mehrdimensionale Arrays

Heiko Baur 10. November 2006

Typdeklarationen. Es gibt in Haskell bereits primitive Typen:

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Reguläre Ausdrücke: Beschreibung und Anwendung

Logische und funktionale Programmierung

Shellprogrammierung. Einführung in Linux. Antonia Blanke. Operatoren Schleifen Case Funktionen Kommandos Signale Stringmanipulation

Algorithmen mit konstantem Platzbedarf: Die Klasse REG

Tutorium Reguläre Ausdrücke/Code Munger

Kapitel 4: Syntaxdiagramme und Grammatikregeln

Formale Sprachen. Spezialgebiet für Komplexe Systeme. Yimin Ge. 5ahdvn. 1 Grundlagen 1. 2 Formale Grammatiken 4. 3 Endliche Automaten 5.

VisualBasic - Variablen

Thomas Behr. 17. November 2011

Grundlagen. Kapitel 1

Theoretische Grundlagen des Software Engineering

Kontextfreie Grammatiken

Einführung in die Theoretische Informatik

3. Grundlegende Begriffe von Logiken - Aussagenlogik

Grammatik Prüfung möglich, ob eine Zeichenfolge zur Sprache gehört oder nicht

Formale Sprachen. Formale Grundlagen (WIN) 2008S, F. Binder. Vorlesung im 2008S

Transkript:

Formale Sprachen und Automaten Kapitel 3: Regular Expressions Vorlesung an der DHBW Karlsruhe Thomas Worsch Karlsruher Institut für Technologie, Fakultät für Informatik Wintersemester 2012

Kapitel 3 Regular Expressions Ein Anwendungsszenario für regular expressions Regular expressions bei egrep Bequemere Notation für reguläre Ausdrücke Metazeichen in Zeichenklassen Anker Gruppierungen und was sie matchen Rückwärtsverweise Verwendung von Metazeichen als reguläre Zeichen Inhalt 2/62

Ein Anwendungsszenario für regular expressions Regular expressions bei egrep Bequemere Notation für reguläre Ausdrücke Metazeichen in Zeichenklassen Anker Gruppierungen und was sie matchen Rückwärtsverweise Verwendung von Metazeichen als reguläre Zeichen Ein Anwendungsszenario für regular expressions 3/62

Einleitung Ein Regular Expression oder kurz Regex bietet die Möglichkeit, eine (nicht zu komplizierte) formale Sprache kompakt zu spezifizieren. Eine Reihe von (Unix-)Werkzeugen und Programmiersprachen erfordern oder erlauben zumindest die Benutzung von Regexes. wörtlich: regulärer Ausdruck, aber allgemeiner als das in Kapitel 2 eingeführte Konzept. hier: keine vollständige Definition von Regex, aber Schritt für Schritt wesentliche Aspekte Vorläufig denke man bei Regex einfach an regulärer Ausdruck. Je nach Werkzeug variieren die konkrete Syntax und/oder die Mächtigkeit der zur Verfügung stehenden Konzepte. hier: grundsätzliche, allgemein gültige Fakten Ein Anwendungsszenario für regular expressions 4/62

Informationen die üblichen Quellen (man pages, etc.) Jeffrey E. F. Friedl: Mastering Regular Expressions David Mertz: http://www.gnosis.cx/publish/ programming/regular_expressions.html Philip Hazel: http://www.pcre.org/ Dokumentation von java.util.regex Ein Anwendungsszenario für regular expressions 5/62

Ein Anwendungsszenario für regular expressions Regular expressions bei egrep Bequemere Notation für reguläre Ausdrücke Metazeichen in Zeichenklassen Anker Gruppierungen und was sie matchen Rückwärtsverweise Verwendung von Metazeichen als reguläre Zeichen Regular expressions bei egrep 6/62

3.1 Anwendungsszenario Gegeben: ein Wort w und ein Regex R Frage: Enthält w ein Teilwort, das durch R beschrieben wird? kurz: Matcht R in w? Beispiel: R = 001 11101 matcht w = 11001001000, denn w enthält (sogar zweimal) das Teilwort 001. Programm egrep Argumente: Regex R und ein (oder mehrere) Dateiname(n) Für jede Zeile der Datei(en) wird geprüft, ob sie als Wort von R gematcht wird. Solche Zeilen werden ausgegeben (oder weiterverarbeitet), alle anderen nicht. Regular expressions bei egrep 7/62

3.2 Beispiele bei egrep: Warnung Es gibt nicht die eine Implementierung von egrep. Details sind verschieden: Dokumentation lesen! Wir beschränken uns auf allgemein Gültiges. Regular expressions bei egrep 8/62

Beispieldatei 0. huo 1. hugo Jede Zeile beginnt mit einer Ziffer und endet mit einem o. Regular expressions bei egrep 9/62

Typischer Aufruf von egrep > egrep hugo liste erstes Argument: Regex weitere Argumente: Dateinamen Achtung: Um zu verhindern, dass die Shell Zeichen wie z. B. * interpretiert, wird der ganze Regex in single quotes... eingeschlossen, die nicht zum Regex gehören. Regular expressions bei egrep 10/62

3.1 Beispiele 0. huo 1. hugo > egrep hugo liste Regular expressions bei egrep 11/62

3.1 Beispiele 0. huo 1. hugo > egrep hugo liste 1. hugo Regular expressions bei egrep 11/62

3.1 Beispiele 0. huo 1. hugo > egrep uo ggg liste Regular expressions bei egrep 12/62

3.1 Beispiele 0. huo 1. hugo > egrep uo ggg liste 0. huo Regular expressions bei egrep 12/62

3.1 Beispiele 0. huo 1. hugo > egrep ggg* liste Regular expressions bei egrep 13/62

3.1 Beispiele 0. huo 1. hugo > egrep ggg* liste Regular expressions bei egrep 13/62

3.1 Beispiele 0. huo 1. hugo > egrep gg(g)* liste Regular expressions bei egrep 14/62

3.1 Beispiele 0. huo 1. hugo > egrep gg(g)* liste Regular expressions bei egrep 14/62

3.1 Beispiele 0. huo 1. hugo > egrep (gg)* liste Regular expressions bei egrep 15/62

3.1 Beispiele 0. huo 1. hugo > egrep (gg)* liste 0. huo 1. hugo Regular expressions bei egrep 15/62

Ein Anwendungsszenario für regular expressions Regular expressions bei egrep Bequemere Notation für reguläre Ausdrücke Metazeichen in Zeichenklassen Anker Gruppierungen und was sie matchen Rückwärtsverweise Verwendung von Metazeichen als reguläre Zeichen Bequemere Notation für reguläre Ausdrücke 16/62

3.3 Abkürzungen Ist R ein regulärer Ausdruck, so schreibt man ε statt O/*, R+ statt RR*, R* statt R * und R+ statt R + R? statt R ε Bequemere Notation für reguläre Ausdrücke 17/62

3.4 Beispiele 0. huo 1. hugo > egrep g+ liste Bequemere Notation für reguläre Ausdrücke 18/62

3.4 Beispiele 0. huo 1. hugo > egrep g+ liste 1. hugo Bequemere Notation für reguläre Ausdrücke 18/62

3.4 Beispiele 0. huo 1. hugo > egrep g? liste Bequemere Notation für reguläre Ausdrücke 19/62

3.4 Beispiele 0. huo 1. hugo > egrep g? liste 0. huo 1. hugo Bequemere Notation für reguläre Ausdrücke 19/62

3.5 Zeichenklassen Für einzelne Zeichen x 1,, x k schreibt man statt x 1 x k kürzer [x 1 x k ]. Bei naheliegender Reihenfolge (Alphabet!) auch noch kürzer [x 1 -x k ]. Bequemere Notation für reguläre Ausdrücke 20/62

3.6 Beispiel für Zeichenklassen Beispiel: [a-z] statt a b c d e f g h i j k l m n o p q r s t u v w x y z. Beispiel: Variablennamen (ohne Unterstriche) in C [a-za-z][a-za-z0-9]* Bequemere Notation für reguläre Ausdrücke 21/62

3.7 Beispiele für Zeichenklassen 0. huo 1. hugo > egrep [defg] liste Bequemere Notation für reguläre Ausdrücke 22/62

3.7 Beispiele für Zeichenklassen 0. huo 1. hugo > egrep [defg] liste 1. hugo Bequemere Notation für reguläre Ausdrücke 22/62

3.7 Beispiele für Zeichenklassen 0. huo 1. hugo > egrep [d-g] liste Bequemere Notation für reguläre Ausdrücke 23/62

3.7 Beispiele für Zeichenklassen 0. huo 1. hugo > egrep [d-g] liste 1. hugo Bequemere Notation für reguläre Ausdrücke 23/62

3.8 Negierte Zeichenklassen Angabe der ausgeschlossenen Zeichen Man schreibt [^x 1 x k ] für die Menge aller Zeichen, ausgenommen x 1,, x k. Bequemere Notation für reguläre Ausdrücke 24/62

3.9 Beispiel für eine negierte Zeichenklasse 0. huo 1. hugo > egrep [^1234hugo. ] liste Bequemere Notation für reguläre Ausdrücke 25/62

3.9 Beispiel für eine negierte Zeichenklasse 0. huo 1. hugo > egrep [^1234hugo. ] liste 0. huo Bequemere Notation für reguläre Ausdrücke 25/62

3.10 Wiederholungshäufigkeiten Es seien x und y nichtnegative ganze Zahlen mit x y. R{x} steht für (R) (R). }{{} x mal R{x,} steht für R{x}R*. R{x, y} steht für (R) (R) (R?) (R?). }{{}}{{} x mal y x mal Bequemere Notation für reguläre Ausdrücke 26/62

Beispiele ε ist äquivalent zu R{0} R ist äquivalent zu R{1} R* ist äquivalent zu R{0,} R+ ist äquivalent zu R{1,} R? ist äquivalent zu R{0,1} Bequemere Notation für reguläre Ausdrücke 27/62

3.11 Beispiele für Wiederholungshäufigkeiten 0. huo 1. hugo > egrep [oguh]{5,} liste Bequemere Notation für reguläre Ausdrücke 28/62

3.11 Beispiele für Wiederholungshäufigkeiten 0. huo 1. hugo > egrep [oguh]{5,} liste Bequemere Notation für reguläre Ausdrücke 28/62

3.11 Beispiele für Wiederholungshäufigkeiten 0. huo 1. hugo > egrep [ouh]{5,} liste Bequemere Notation für reguläre Ausdrücke 29/62

3.11 Beispiele für Wiederholungshäufigkeiten 0. huo 1. hugo > egrep [ouh]{5,} liste Bequemere Notation für reguläre Ausdrücke 29/62

3.11 Beispiele für Wiederholungshäufigkeiten 0. huo 1. hugo > egrep [ogh]{5,} liste Bequemere Notation für reguläre Ausdrücke 30/62

3.11 Beispiele für Wiederholungshäufigkeiten 0. huo 1. hugo > egrep [ogh]{5,} liste Bequemere Notation für reguläre Ausdrücke 30/62

3.12 Punkt Ein einzelner Punkt. steht für ein x-beliebiges Zeichen. Bequemere Notation für reguläre Ausdrücke 31/62

Ein Anwendungsszenario für regular expressions Regular expressions bei egrep Bequemere Notation für reguläre Ausdrücke Metazeichen in Zeichenklassen Anker Gruppierungen und was sie matchen Rückwärtsverweise Verwendung von Metazeichen als reguläre Zeichen Metazeichen in Zeichenklassen 32/62

3.13 Problem Wie notiert man Metazeichen, also - ^ [ ] als normale Zeichen in einer Zeichenklasse? Metazeichen in Zeichenklassen 33/62

3.14 Lösung (jedenfalls manchmal) Mitunter gelten die folgenden Regeln: Ein - unmittelbar nach [ bzw. nach [^ steht für sich Ein ^ nicht unmittelbar nach [ steht für sich Ein ] unmittelbar nach [ bzw. nach [^ steht für sich Ein [ unmittelbar nach [ bzw. nach rx[n steht für sich Metazeichen in Zeichenklassen 34/62

3.15 Beispiele für Metazeichen in Zeichenklassen Die Datei klammern enthalte zwei Zeilen mit jeweils einer Klammer als einzigem Zeichen: [ ] > egrep [[] klammern Metazeichen in Zeichenklassen 35/62

3.15 Beispiele für Metazeichen in Zeichenklassen Die Datei klammern enthalte zwei Zeilen mit jeweils einer Klammer als einzigem Zeichen: [ ] > egrep [[] klammern [ Metazeichen in Zeichenklassen 35/62

3.15 Beispiele für Metazeichen in Zeichenklassen [ ] > egrep []] klammern Metazeichen in Zeichenklassen 36/62

3.15 Beispiele für Metazeichen in Zeichenklassen [ ] > egrep []] klammern ] Metazeichen in Zeichenklassen 36/62

3.15 Beispiele für Metazeichen in Zeichenklassen [ ] > egrep [^[] klammern Metazeichen in Zeichenklassen 37/62

3.15 Beispiele für Metazeichen in Zeichenklassen [ ] > egrep [^[] klammern ] Metazeichen in Zeichenklassen 37/62

3.15 Beispiele für Metazeichen in Zeichenklassen [ ] > egrep [^]] klammern Metazeichen in Zeichenklassen 38/62

3.15 Beispiele für Metazeichen in Zeichenklassen [ ] > egrep [^]] klammern [ Metazeichen in Zeichenklassen 38/62

3.15 Beispiele für Metazeichen in Zeichenklassen [ ] > egrep [^^] klammern Metazeichen in Zeichenklassen 39/62

3.15 Beispiele für Metazeichen in Zeichenklassen [ ] > egrep [^^] klammern [ ] Metazeichen in Zeichenklassen 39/62

Ein Anwendungsszenario für regular expressions Regular expressions bei egrep Bequemere Notation für reguläre Ausdrücke Metazeichen in Zeichenklassen Anker Gruppierungen und was sie matchen Rückwärtsverweise Verwendung von Metazeichen als reguläre Zeichen Anker 40/62

3.16 Problem Gesucht: Matches, die am Anfang der untersuchten Zeichenkette beginnen und/oder am Ende der Zeichenkette enden. Festlegung: Der Anker für den Zeichenkettenanfang ist das ^. Der Anker für das Zeichenkettenende ist das $. Ein Ankersymbol matcht nicht das entsprechende Symbol in der Eingabe, sondern das leere Wort an einer ganz bestimmten Stelle in der Eingabe. Anker 41/62

3.17 Beispiele für Anker 0. huo 1. hugo > egrep ugg liste Anker 42/62

3.17 Beispiele für Anker 0. huo 1. hugo > egrep ugg liste Anker 42/62

3.17 Beispiele für Anker 0. huo 1. hugo > egrep ugg$ liste Anker 43/62

3.17 Beispiele für Anker 0. huo 1. hugo > egrep ugg$ liste Anker 43/62

3.17 Beispiele für Anker 0. huo 1. hugo > egrep ^ugg liste Anker 44/62

3.17 Beispiele für Anker 0. huo 1. hugo > egrep ^ugg liste Anker 44/62

3.17 Beispiele für Anker 0. huo 1. hugo > egrep ggo$ liste Anker 45/62

3.17 Beispiele für Anker 0. huo 1. hugo > egrep ggo$ liste Anker 45/62

Ein Anwendungsszenario für regular expressions Regular expressions bei egrep Bequemere Notation für reguläre Ausdrücke Metazeichen in Zeichenklassen Anker Gruppierungen und was sie matchen Rückwärtsverweise Verwendung von Metazeichen als reguläre Zeichen Gruppierungen und was sie matchen 46/62

Problem Bisher nur die Frage: Matcht ein Regex R in einem Wort w (oder nicht)? Nun die Frage: Matcht ein Regex R in einem Wort w, und wenn ja, wo? Gruppierungen und was sie matchen 47/62

3.18 Beispiele Im Allgemeinen mehrere Stellen, an denen gematcht wird: R = aa bb und w = _aa_bb_ Wird aa gematcht oder bb? R = bb* und w = abbbbc Wird nur ein b gematcht, oder 2 b oder 3 oder 4? R = b bbb und w = abbbc Wird nur b gematcht oder bbb? Gruppierungen und was sie matchen 48/62

3.19 Regel 1: Position des gematchten Textes 1. Ein weiter vorne in der Zeichenkette beginnender exakter Match wird einem weiter hinter beginnenden immer bevorzugt. Diese Regel ist so für (nahezu?) alle Werkzeuge, die mit Regexes umgehen, gültig. Gruppierungen und was sie matchen 49/62

3.20 Regel 2: Länge des gematchten Textes Hier gibt es deutliche Unterschiede; verschiedene Werkzeuge implementieren verschiedene Spezifikationen. 2a. POSIX Spezifikation: Bei gleichem Startpunkt in der Zeichenkette wird ein längerer Match einem kürzeren immer bevorzugt. 2b. Bei einigen anderen Werkzeugen (z. B. Perl): kompliziertere Festlegung des gematchten Textes, dafür einfachere und schnelle Verfahren. Gruppierungen und was sie matchen 50/62

3.21 Beispiele 1. R = aa bb und w = _aa_bb_ Regel 1: das aa wird gematcht und nicht das bb 2. R = bb aa und w = _aa_bb_ Regel 1: das aa wird gematcht und nicht das bb 3. R = bb* und w = abbbbc Regel 2a: das bbbb wird gematcht in diesem Fall matcht z. B. auch Perl noch bbbb 4. R =.* und w beliebig Es wird alles gematcht. Kompliziertere Beispiele kommen gleich. Gruppierungen und was sie matchen 51/62

3.22 Gruppierungen Sinnvolle Teilausdrücke können durch Klammerung mit ( und ) zu einem Unterausdruck zu gruppieren werden. Gruppen dürfen geschachtelt sein. Manchmal gibt es Implementierungsschranken bei der Anzahl von Gruppen insgesamt oder bei der Schachtelungstiefe. Vereinbarung: Gruppe 0 ist der gesamte Regex, auch wenn nicht geklammert wurde. Im Folgenden wird stets angenommen, dass der gesamte Regex nicht geklammert ist. Die Nummern der weiteren Gruppen ergeben sich durch Zählen der öffnenden Klammern bis zur interessierenden Gruppe inkl. Gruppierungen und was sie matchen 52/62

3.23 Beispiele für Gruppierungen R = (bb)c(bb) und w = zzbbcbbz: zzbbcbbz 1 2 0 R = (bb)c*(bb) und w = zzbbcbbzzzbbcccbb: zzbbcbbzzzbbcccbb 1 2 0 Gruppierungen und was sie matchen 53/62

3.24 Beispiel für Gruppierungen R = (.*)(.*) und w = abcdefg Annahme: POSIX-Regeln Gruppierungen und was sie matchen 54/62

3.24 Beispiel für Gruppierungen R = (.*)(.*) und w = abcdefg Annahme: POSIX-Regeln abcdefg 1 0 Gruppierungen und was sie matchen 54/62

3.24 Beispiel für Gruppierungen R = (.*)(.*) und w = abcdefg Annahme: POSIX-Regeln abcdefg 1 0 Die zweite Gruppe matcht nichts, weil die erste ein möglichst langes Teilwort matcht und nichts übrig lässt. Gruppierungen und was sie matchen 54/62

Ein Anwendungsszenario für regular expressions Regular expressions bei egrep Bequemere Notation für reguläre Ausdrücke Metazeichen in Zeichenklassen Anker Gruppierungen und was sie matchen Rückwärtsverweise Verwendung von Metazeichen als reguläre Zeichen Rückwärtsverweise 55/62

3.25 Rückwärtsverweise (engl. back references) erweitern die Möglichkeiten von Regexes deutlich. Nachdem Gruppe i abeschlossen ist, steht das von Gruppe i gematcht wurde. Bei manchen Werkzeugen sind nur einstellige Gruppennummern zulässig. i für das Teilwort, / Rückwärtsverweise 56/62

3.26 Beispiel R = (abc xyz) / 1 Rückwärtsverweise 57/62

3.26 Beispiel R = (abc xyz) 1 matcht abcabc / Rückwärtsverweise 57/62

3.26 Beispiel R = (abc xyz) 1 matcht abcabc matcht xyzxyz / Rückwärtsverweise 57/62

3.26 Beispiel R = (abc xyz) 1 matcht abcabc matcht xyzxyz matcht nicht abcxyz / Rückwärtsverweise 57/62

3.26 Beispiel R = (abc xyz) 1 matcht abcabc matcht xyzxyz matcht nicht abcxyz / Beachte: Unterschied zu (abc xyz)(abc xyz)!!! Rückwärtsverweise 57/62

3.27 Beispiel für Rückwärtsverweise 0. huo 1. hugo 4. huggggo 5. hugggggo 6. huggggggo 7. hugggggggo 8. huggggggggo > egrep ((gg)+)\1 liste2 Rückwärtsverweise 58/62

3.27 Beispiel für Rückwärtsverweise 0. huo 1. hugo 4. huggggo 5. hugggggo 6. huggggggo 7. hugggggggo 8. huggggggggo > egrep ((gg)+)\1 liste2 4. huggggo 5. hugggggo 6. huggggggo 7. hugggggggo 8. huggggggggo Rückwärtsverweise 58/62

3.27 Beispiel für Rückwärtsverweise 0. huo 1. hugo 4. huggggo 5. hugggggo 6. huggggggo 7. hugggggggo 8. huggggggggo > egrep u((gg)+)\1o liste2 Rückwärtsverweise 59/62

3.27 Beispiel für Rückwärtsverweise 0. huo 1. hugo 4. huggggo 5. hugggggo 6. huggggggo 7. hugggggggo 8. huggggggggo > egrep u((gg)+)\1o liste2 4. huggggo 8. huggggggggo Rückwärtsverweise 59/62

3.28 Beispiel für Rückwärtsverweise R = (.*).*( / 1) und w = abcxabca Aufgrund der ersten Regel ist klar, dass der Match auf jeden Fall mit dem ersten Symbol des Wortes beginnt. Aber dann? Rückwärtsverweise 60/62

3.28 Beispiel für Rückwärtsverweise R = (.*).*( / 1) und w = abcxabca Aufgrund der ersten Regel ist klar, dass der Match auf jeden Fall mit dem ersten Symbol des Wortes beginnt. Aber dann? Unter anderem folgende Möglichkeiten: Die erste Gruppe ist maximal gefräßig und matcht abc. Damit ist der Rest des Matches eindeutig festgelegt: Rückwärtsverweise 60/62

3.28 Beispiel für Rückwärtsverweise R = (.*).*( / 1) und w = abcxabca Aufgrund der ersten Regel ist klar, dass der Match auf jeden Fall mit dem ersten Symbol des Wortes beginnt. Aber dann? Unter anderem folgende Möglichkeiten: Die erste Gruppe ist maximal gefräßig und matcht abc. Damit ist der Rest des Matches eindeutig festgelegt: abcxabca 1 2 0 Rückwärtsverweise 60/62

3.28 Beispiel für Rückwärtsverweise R = (.*).*( 1) und w = abcxabca / Aufgrund der ersten Regel ist klar, dass der Match auf jeden Fall mit dem ersten Symbol des Wortes beginnt. Aber dann? Unter anderem folgende Möglichkeiten: Die erste Gruppe ist maximal gefräßig und matcht abc. Damit ist der Rest des Matches eindeutig festgelegt: abcxabca 1 2 0 Die erste Gruppe matcht a,.* ist maximal gefräßig und der Rückwärtsverweis matcht erst am Wortende: Rückwärtsverweise 60/62

3.28 Beispiel für Rückwärtsverweise R = (.*).*( 1) und w = abcxabca / Aufgrund der ersten Regel ist klar, dass der Match auf jeden Fall mit dem ersten Symbol des Wortes beginnt. Aber dann? Unter anderem folgende Möglichkeiten: Die erste Gruppe ist maximal gefräßig und matcht abc. Damit ist der Rest des Matches eindeutig festgelegt: abcxabca 1 2 0 Die erste Gruppe matcht a,.* ist maximal gefräßig und der Rückwärtsverweis matcht erst am Wortende: abcxabca 1 2 0 Rückwärtsverweise 60/62

Ein Anwendungsszenario für regular expressions Regular expressions bei egrep Bequemere Notation für reguläre Ausdrücke Metazeichen in Zeichenklassen Anker Gruppierungen und was sie matchen Rückwärtsverweise Verwendung von Metazeichen als reguläre Zeichen Verwendung von Metazeichen als reguläre Zeichen 61/62

3.29 Symbole O/, (, ), und * haben eine besondere Bedeutung Außerhalb von Zeichenklassen außerdem zumindest., +,?, [, ], { und } sogenannte Metazeichen Problem: Verwendung als Literal? Regel: Um Metazeichen auch als Literale benutzbar zu machen, muss ihnen ein Backslash vorangestellt werden. / Verwendung von Metazeichen als reguläre Zeichen 62/62