Christian Seidel, Magnus Finkenzeller, Andrea Stubbe, Sabine Unterpieringer, Andreas Hauser, Gulnas Galianova
07.11.2002
Some people, when confronted with a problem,
think ``I know, I'll use regular expressions.''
Now they have two problems.
- Jamie Zawinski
Reguläre Ausdrücke
(engl.: regular expressions)
Überblick
Zwei wichtige Zeichen
/ausdruck/
Schrägstriche (Slashes) schließen einen regulären Ausdruck ein
z.B. /abc/
\
Sonderzeichen
leitet sonderzeichen ein bzw. hebt auf
z.B. \b
oder \\
Zeichenklassen
. (Punkt), Wildcard
stellt ein beliebiges Zeichen dar (außer \n
: Newline)
z.B. /./
'a' oder 'B' oder '9' oder '&' etc.
Zeichenklasse
eckige Klammern fassen eine Zeichenklasse zusammen
z.B. /[nN]/ 'n' oder 'N'
- (Minus), Bereichsoperator
``ein Zeichen zwischen ...und ...''
z.B. /[a-z]/ ein Kleinbuchstabe ('a' oder 'b' oder 'c' etc.)
^ (Zirkumflex, Caret direkt hinter [
), Negation
``jedes Zeichen außer ...''
z.B. jedes Zeichen außer 'a' (also 'b' oder '7' oder '&' etc.)
Vordefinierte Zeichenklassen
\d
: eine Ziffer [0-9] (z.b. 5)
\w
: ein Wortzeichen [a-zA-Z0-9_] (a)
\s
: ein Leerraum [ \t\n\f\r]
(Leerzeichen, Tabulator, Newline,
Zeilen-/Seitenvorschub, Wagenrücklauf)
Komplemente dazu: jeweils in Großbuchstaben,
\D, \W, \S
Gruppierende Muster
Folge:
z.B. abc, d.h. a gefolgt von b gefolgt von c
Auswahl:
[abc]
= Zeichenklasse (s.o.), Alternative Einzelzeichen, a oder b oder c
sabineandrea = Alternative Zeichenketten, sabine oder andrea
Multiplikatoren:
Klammern als Zwischenspeicher/Register
(nicht in allen Sprachen):
anchors, anker:
Präzendenz
von hoch nach niedrig:
z.B. abc
d 'a' oder 'bc' oder 'd'
(Folge steht über Auswahl)
z.B. x
y 'x' am Zeilenanfang oder 'y' an beliebiger Stelle
z.B. (x
y) 'x' oder 'y' am Zeilenanfang
Deterministische endliche Automaten
(engl.: deterministic finite state automata)
Erklärungen:
1. Automaten sind Systeme, die abhängig von der Eingabe bestimmte Aktionen ausführen.
2. Automaten sind einfache Modelle für Computer, in dessen Speicher nur ``der aktuelle Zustand'' steht.
Wozu werden Automaten verwendet?
Verwendungen für Automaten finden sich unter anderem:
Definition:
Ein Automat besteht zwingend aus einem 5-Tuppel von:
Beispiel:
Steuerung einer Schiebetür: ( das + stellt hier den Übergang von einem Zustand in den nächsten dar)
q0 (Anfangszustand): Die Tür ist zu, und niemand steht davor.
+
q1: Die Tür ist zu, und jemand steht davor.
+
q2: Die Tür ist auf, und jemand steht davor.
+
q3: Die Tür ist auf, und niemand steht davor.
+
q4 ( Endzustand): Die Tür ist zu, und niemand steht davor.
Den Automat ``interessiert'' es nicht, was in Zustand vorher war. Er sucht immer nur den nächsten Zustand.
Nichtdeterministische endliche Automaten
(engl.: nondeterministic finite state automata)
Erklärung
Nichtdeterministische Endliche Automaten sind genau wie Deterministische nur mit dem Unterschied, dass sie Verzweigungen erlauben an denen zwei oder mehr nächste Zustände möglich sind.
Deterministisch
Nichtdeterministisch
Was passiert an einer mehrdeutigen Kreuzung?
Jede Möglichkeit wird gleichzeitig verfolgt.
Man schaut ein wenig in die `Zukunft' um herauszufinden welchem Pfad man folgen soll.
Man merkt sich die Kreuzung, folgt dann einem Pfad und falls dieser nicht zum Erfolg führt, geht man zurück zur gemerkten Kreuzung und nimmt einen anderen Pfad. Gibt es keinen Pfad mehr den man noch nicht versucht hat, geht man zur vorherigen gemerkten Kreuzung. Gibt es keine, wird abgebrochen.
Strategien
DSA in Perl
sub match { my @word = @{$_[0]}; my $state = $_[1]; foreach my $c (@word) { if($state->{$c} eq 'end') { return "success"; } elsif(exists $state->{$c}) { $state = $state->{$c}; } else { return "failed"; } } }
NSA in Perl
sub match { my $index; my @word = @{$_[0]}; my $state = $_[1]; foreach my $c (@word) { $index++; if($state->{$c} eq 'end') { return "success"; } elsif(exists $state->{$c}) { foreach $path (@{$state->{$c}}) { my @rest = @word[$index .. @word]; if(match(\@rest, $path) eq "success") {return "success";} } } else { return "failed"; } } }
Literatur
Daniel Jurafsky, James H. Martin:
Speech and Language Processing
(Draft of September 28, 1999)
Jeffrey E.F. Friedl:
Mastering Regular Expressions
(Second Edition, 2002)