Post on 13-Mar-2016
description
Reguläre Ausdrücke / regular expression
P. Brezany 2
=~ m/^[\w\-]+@[\.\w\-]+$/
P. Brezany 3
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 4
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: (0|1)* 110000001…1111001100Beispiel: (001)+ 001001001001001001001
P. Brezany 5
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 6
Perl (Practical Extraction and Report Language)
#!/usr/bin/perlprint "Hallo Welt! \n";
P. Brezany 7
Mustererkennung und Reguläre Ausdrücke in Perl
=~ m/MUSTER/
=~ s/MUSTER/TEXT/
split(MUSTER,STRING)
P. Brezany 8
Mustererkennung und Reguläre Ausdrücke in Perl
#!/usr/bin/perl$satz = "Hallo Welt! \n";if ($satz =~ m/Hallo/) {
print "Hallo gefunden!"; }
P. Brezany 9
Mustererkennung und Reguläre Ausdrücke in Perl
#!/usr/bin/perl$satz = "Hallo Welt! \n";$satz =~ s/Hallo/Tschau/;print $satz;
P. Brezany 10
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 11
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 12
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 13
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 14
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 15
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 16
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 17
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 18
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 19
Mustererkennung und Reguläre Ausdrücke in Perl
$satz = "3 Engel für Charlie???";
$satz =~ m/Charlie\?+/; ⇒ true
matcht: Charlie?, Charlie????,… 1 - n Fragezeichen
$satz =~ m/Charlie\?*/; ⇒ true
matcht: Charlie auch ohne ? 0 - n Fragezeichen
P. Brezany 20
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 21
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 22
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 Stringsabspeichern. Der gematchte Text des Musters im ersten Klammernpaar wird in $1, der im Zweiten in $2gespeichert usw.
P. Brezany 23
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 in $1 (.*) speichert die mittleren Buchstaben in $2 (.)$ speichert den letzten Buchstaben in $3
P. Brezany 24
=~ m/^[\w\-]+@[\.\w\-]+$/
P. Brezany 25
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 26
\n - Zeilenumbruch\t - Tabulator\w - Irgendein alphanumerischer (word) Buchstaben; [a-zA-Z0-9_] \W - nicht alphanumerisch (non-word); ist identisch mit [^a-zA-Z0-9_] \d - Eine Zahl. Ist identisch mit [0-9] \D - Keine Zahl. Ist identisch mit [^0-9]\s - 'whitespace character': space, tab, newline, etc\S - 'non-whitespace character'\b - Wortgrenze (nur ausserhalb [ ])\B - 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[abc] - a oder b oder c[^ab] - weder a noch b[a-z]+ - Irgendeine Folge von Kleinbuchstaben| - entweder oder; z.B.: (eg|le)gs Entweder eggs oder legs() $1 - Teil des Strings merken{2,4} - Quantifier\i - ignore case (nach Muster)\g - greedy (nach Muster)
P. Brezany 27
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 eineinheitliches Format.
(Textersetzung mit =~ s/MUSTER/TEXT/)
P. Brezany 28
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 29
Mustererkennung und Reguläre Ausdrücke in Perl
Aufgabe 3:
Erkennen Sie das grundsätzliche Format einesUNET-Logins. (also: a und Matrikelnummerz.B.: a0409142).
Folgende Regeln gilt es einzuhalten: Ein UNET-Login beginnt mit einem a.Danach folgen 7 (beliebigen) Ziffern.
P. Brezany 30
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 31
Mustererkennung und Reguläre Ausdrücke in Perl
Aufgabe 5:
$var = "Hände, Strände, Bände";
Ersetzen Sie ä durch ae.
P. Brezany 32
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.