Reguläre Ausdrücke / regular expression
description
Transcript of Reguläre Ausdrücke / regular expression
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…1111001100
Beispiel: (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/perl
print "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/^\?/; ⇒ false
matcht: ein Fragezeichen im String,
das am String-Anfang stehen muss
P. Brezany 16
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 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 Strings
abspeichern. Der gematchte Text des Musters im
ersten Klammernpaar wird in $1, der im Zweiten in $2
gespeichert 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 ein
einheitliches 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 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 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.
P. Brezany 33
GREP Program (Unix/Linux Utility)
P. Brezany 34
Mustererkennung und Reguläre Ausdrücke mit grep
grep ist ein Unix-Programm
das nach Muster in Dateien sucht
Zeilen die das Muster enthalten werden ausgegeben
P. Brezany 35
Mustererkennung und Reguläre Ausdrücke mit grep
Optionen:
grep -v alle Zeilen die nicht das Muster enthalten
grep -n mit Zeilennummer vor der Zeile
grep -i ignoriert Groß/Kleinschreibung
grep -l gibt (nur) den Dateinamen aus
grep -c gibt (nur) die Anzahl der Zeilen
grep -A 3 gibt nach der Zeile noch 3 weitere Zeilen aus
grep -E oder egrep: erweiterte regex
grep -niA 1 SMELL joke1
2:How does he smell?
3-Awful. man grep
My dog's got no nose.How does he smell?Awful.
P. Brezany 36
Mustererkennung und Reguläre Ausdrücke mit grep
[A-Z] [a-z] [0-9] sind Zeichenklassen:
grep '[Oo]' joke1
My dog's got no nose.
How does he smell?
My dog's got no nose.How does he smell?Awful.
P. Brezany 37
Mustererkennung und Reguläre Ausdrücke mit grep
grep 'l\{2\}' joke1
How does he smell?
Der Ausdruck vor
\{n\} kommt n Mal vor
\{n,\} kommt mindestens n Mal vor
\{n,m\} kommt n bis m Mal vor
My dog's got no nose.How does he smell?Awful.
P. Brezany 38
Mustererkennung und Reguläre Ausdrücke mit grep
^Zeilenanfang und Zeilenende$
grep '^$' joke1
findet alle Leerzeilen
übrigens: ^ ist der Zirkumflex oder das Caret
P. Brezany 39
Mustererkennung und Reguläre Ausdrücke mit grep
. - irgendein beliebiges Zeichen
* - null oder mehrere Male den letzten Ausdruck
\ - zum maskieren von 'Sonderzeichen'
P. Brezany 40
Mustererkennung und Reguläre Ausdrücke mit egrep
grep -E oder egrep: erweiterte Reguläre Ausdrücke
+ - ein oder mehrere Male den letzten Ausdruck
? - null oder ein Mal den letzten Ausdruck
| - entweder oder
() - z.B.: (eg|le)gs : Entweder eggs oder legs
P. Brezany 41
-