Reguläre Ausdrücke / regular expression
=~ m/^[\w\-]+@[\.\w\-]+$/
P. Brezany
2
Mustererkennung und Reguläre Ausdrücke in Perl
http://de.wikipedia.org/wiki/Reguläre_Ausdrücke
http://en.wikipedia.org/wiki/Regular_expression
http://www.google.at/search?q=regex+perl
P. Brezany
3
Reguläre Ausdrücke in der theoretischen Informatik
Alternative
Aneinanderreihung
Wiederholung
0 oder 1
0 und 1
1n (n ≥ 0)
0+1
0.1
1*
0|1
01
11* = 1+
Beispiel:
Beispiel:
(0|1)*
(001)+
110000001…1111001100
001001001001001001001
P. Brezany
4
Reguläre Ausdrücke in der Praxis
84.141.73.125 - - [07/Feb/2006:16:30:48 +0100] "GET /~charlie/burka-girls/burka-girls/zeichnen.gif
HTTP/1.1" 200 17401 "http://www.horus.at/~charlie/burka-girls/index.php" "Mozilla/4.0
(compatible; MSIE 6.0; Windows NT 5.1; Crazy Browser 1.0.5; .NET CLR 1.0.3705; .NET CLR
1.1.4322)" 21374
84.58.207.237 - - [07/Feb/2006:18:17:32 +0100] "GET /~charlie/fotos/down.gif HTTP/1.1" 200 79
"http://www.horus.at/~charlie/fotos/index.php" "Mozilla/5.0 (Macintosh; U; PPC Mac OS X; de-de)
AppleWebKit/85.8.2 (KHTML, like Gecko) Safari/85.8" 29228
84.58.207.237 - - [07/Feb/2006:18:17:32 +0100] "GET
/~charlie/fotos/private_fotos/archiv/iris_party01.jpg HTTP/1.1" 200 59489
"http://www.horus.at/~charlie/fotos/index.php" "Mozilla/5.0 (Macintosh; U; PPC Mac OS X; de-de)
AppleWebKit/85.8.2 (KHTML, like Gecko) Safari/85.8" 27171
…
P. Brezany
5
Perl (Practical Extraction and Report Language)
#!/usr/bin/perl
print "Hallo Welt! \n";
P. Brezany
6
Mustererkennung und Reguläre Ausdrücke in Perl
=~ m/MUSTER/
=~ s/MUSTER/TEXT/
split(MUSTER,STRING)
P. Brezany
7
Mustererkennung und Reguläre Ausdrücke in Perl
#!/usr/bin/perl
$satz = "Hallo Welt! \n";
if ($satz =~ m/Hallo/) {
print "Hallo gefunden!";
}
P. Brezany
8
Mustererkennung und Reguläre Ausdrücke in Perl
#!/usr/bin/perl
$satz = "Hallo Welt! \n";
$satz =~ s/Hallo/Tschau/;
print $satz;
P. Brezany
9
Mustererkennung und Reguläre Ausdrücke in Perl
$satz = "3 Engel für Charlie!";
$satz =~ m/a/;
⇒ true
matcht erstes kleines a im String
P. Brezany
10
Mustererkennung und Reguläre Ausdrücke in Perl
$satz = "3 Engel für Charlie!";
$satz =~ m/\d/;
⇒ true
matcht erste Ziffer (3) im String (digit)
P. Brezany
11
Mustererkennung und Reguläre Ausdrücke in Perl
$satz = "3·Engel für Charlie!";
$satz =~ m/\D/;
⇒ true
matcht erste Nicht-Ziffer (Leerzeichen nach 3 und vor E)
P. Brezany
12
Mustererkennung und Reguläre Ausdrücke in Perl
$satz = "3 Engel für Charlie!";
$satz =~ m/f[äöü]r/;
⇒ true
Zeichen-Klassen: z.B. [01], [äöü], [a-z], [^0-9]
matcht: fär oder för oder für im String
matcht nicht: füür oder fäöür oder fr oder FÜR
P. Brezany
13
Mustererkennung und Reguläre Ausdrücke in Perl
Zeichen, wie ^ $ ? . + * | [ ) \ / haben eine spezielle
Bedeutung in Muster und müssen, wenn sie als
normales Zeichen verwendet werden, mit einem
Backslash \ vor dem Zeichen maskiert werden.
P. Brezany
14
Mustererkennung und Reguläre Ausdrücke in Perl
$satz = "Nur 3 Engel für Charlie?";
$satz =~ m/\?$/;
⇒ true
matcht: ein Fragezeichen im String,
das am String-Ende stehen muss
P. Brezany
15
Mustererkennung und Reguläre Ausdrücke in Perl
$satz = "Nur 3 Engel für Charlie?";
$satz =~ m/^\?/;
⇒ false
matcht: ein Fragezeichen im String,
das am String-Anfang stehen muss
P. Brezany
16
Mustererkennung und Reguläre Ausdrücke in Perl
$satz = "3 Engel für Charlie???";
$satz =~ m/Engeln?/; ⇒ true
Das Fragezeichen bedeutet, dass
der Buchstabe vor dem Fragezeichen (n)
einmal oder keinmal vorkommen darf.
P. Brezany
17
Mustererkennung und Reguläre Ausdrücke in Perl
$satz = "3 Engel für Charlie???";
$satz =~ m/Ch.rlie/;
⇒ true
Der Punkt (Joker) kann für genau ein
beliebiges Zeichen stehen.
matcht:
Charlie, ChArlie, Ch1rlie, Ch%rlie, Ch rlie
matcht nicht: Chrlie, Chaarlie
P. Brezany
18
Mustererkennung und Reguläre Ausdrücke in Perl
$satz = "3 Engel für Charlie???";
$satz =~ m/Charlie\?+/;
⇒ true
matcht: Charlie?, Charlie????,…
$satz =~ m/Charlie\?*/;
matcht: Charlie auch ohne ?
P. Brezany
1 - n Fragezeichen
⇒ true
0 - n Fragezeichen
19
Mustererkennung und Reguläre Ausdrücke in Perl
$satz = "3 Engel für Charlie???";
$satz =~ m/Charlie\?{2,4}$/;
⇒ true
matcht: Charlie mit 2,3,oder 4 Fragezeichen
$satz =~ m/ChArLiE/i;
⇒ true
Das i macht das Muster case-insensitive,
also unempfindlich gegenüber
Groß- oder Kleinschreibung.
P. Brezany
20
Mustererkennung und Reguläre Ausdrücke in Perl
$satz = "Engel 1, Engel 2 und Engel 3 für Charlie!";
$satz =~ s/Engel/Teufel/;
$satz ist "Teufel 1, Engel 2 und Engel 3 für Charlie!";
$satz =~ s/Engel/Teufel/g;
$satz ist "Teufel 1, Teufel 2 und Teufel 3 für Charlie!";
P. Brezany
21
Mustererkennung und Reguläre Ausdrücke in Perl
$satz = "Teufel 1, Teufel 2 und Teufel 3.";
$satz =~ s/(\d)/v$1.1/g;
$satz = "Teufel v1.1, Teufel v2.1 und Teufel v3.1.";
Mit runden Klammern kann man Teile des Strings
abspeichern. Der gematchte Text des Musters im
ersten Klammernpaar wird in $1, der im Zweiten in $2
gespeichert usw.
P. Brezany
22
Mustererkennung und Reguläre Ausdrücke in Perl
$satz = "Engel A";
$satz =~ s/^(.)(.*)(.)$/$3$2$1/;
$satz ist "Angel E";
Der Ausdruck vertauscht den ersten und den letzten
Buchstaben.
^(.)
(.*)
(.)$
speichert den ersten Buchstaben
speichert die mittleren Buchstaben
speichert den letzten Buchstaben
P. Brezany
in $1
in $2
in $3
23
=~ m/^[\w\-]+@[\.\w\-]+$/
P. Brezany
24
Mustererkennung und Reguläre Ausdrücke in Perl
Beispiel: E-Mail Adresse?
$email =~ m/^[\w\-]+@[\.\w\-]+$/;
Beispiel: Österreichische Postleitzahl?
$plz =~ m/A\s*-\s*\d{4}$/;
Beispiel: whitespace vorne und hinten entfernen…
$name =~ s/^\s*(.*?)\s*$/$1/;
P. Brezany
25
\n
\t
\w
\W
\d
\D
\s
\S
\b
\B
.
^
$
*
*?
+
+?
?
[abc]
[^ab]
[a-z]+
|
() $1
{2,4}
\i
\g
- Zeilenumbruch
- Tabulator
- Irgendein alphanumerischer (word) Buchstaben; [a-zA-Z0-9_]
- nicht alphanumerisch (non-word); ist identisch mit [^a-zA-Z0-9_]
- Eine Zahl. Ist identisch mit [0-9]
- Keine Zahl. Ist identisch mit [^0-9]
- 'whitespace character': space, tab, newline, etc
- 'non-whitespace character'
- Wortgrenze (nur ausserhalb [ ])
- Innerhalb eines Wortes
- Ein einzelner Buchstaben ohne newline
- Zeilen- oder Stringanfang (nur außerhalb von [ ])
- Zeilen- oder Stringende
- Null oder mehrere Male den letzten Buchstaben (gierig / greedy)
- Null oder mehrere Male den letzten Buchstaben (minimal)
- Ein oder mehrere Male den letzten Buchstaben (gierig / greedy)
- Ein oder mehrere Male den letzten Buchstaben (minimal)
- Null oder ein Mal den letzten Buchstaben
- a oder b oder c
- weder a noch b
- Irgendeine Folge von Kleinbuchstaben
- entweder oder; z.B.: (eg|le)gs Entweder eggs oder legs
- Teil des Strings merken
- Quantifier
- ignore case (nach Muster)
- greedy (nach Muster)
P. Brezany
26
Mustererkennung und Reguläre Ausdrücke in Perl
Aufgabe 1:
$bilder = "1.jpg, 2.jpeg, 3.JPEG, 4.JPG";
Bringen Sie die Endungen der Dateien in ein
einheitliches Format.
(Textersetzung mit =~ s/MUSTER/TEXT/)
P. Brezany
27
Mustererkennung und Reguläre Ausdrücke in Perl
Aufgabe 2:
if ( $email =~ m/(:|;)-\)/ ) { print "Smile!"; }
Welches Muster wird hier erkannt?
Wann wird Smile! ausgegeben?
P. Brezany
28
Mustererkennung und Reguläre Ausdrücke in Perl
Aufgabe 3:
Erkennen Sie das grundsätzliche Format eines
UNET-Logins. (also: a und Matrikelnummer
z.B.: a0409142).
Folgende Regeln gilt es einzuhalten:
Ein UNET-Login beginnt mit einem a.
Danach folgen 7 (beliebigen) Ziffern.
P. Brezany
29
Mustererkennung und Reguläre Ausdrücke in Perl
Aufgabe 4:
Prüfen Sie ob der Name einer skalaren Variable in Perl
korrekt ist. (z.B.: $var, $Nachname, $x_11)
Folgende Regeln gilt es einzuhalten:
Skalar-Variablen beginnen mit einem $-Zeichen.
Variablen-Namen bestehen aus (englischen) Buchstaben,
Zahlen und Unterstrichen.
Nach dem $ muss ein Buchstabe stehen.
P. Brezany
30
Mustererkennung und Reguläre Ausdrücke in Perl
Aufgabe 5:
$var = "Hände, Strände, Bände";
Ersetzen Sie ä durch ae.
P. Brezany
31
Mustererkennung und Reguläre Ausdrücke in Perl
Aufgabe 6:
$email =~ m/^[\w\-]+@[\.\w\-]+$/;
Dieser Ausdruck zum matchen von E-Mail Adressen ist
nicht perfekt. Suchen Sie Beispiele für
a) gültige / vernüftige / realistische E-Mail
Adressen, die nicht gematcht werden.
b) unsinnige / unrealistische E-Mail Adressen,
die gematcht werden.
P. Brezany
32

Mustererkennung und Reguläre Ausdrücke in Perl