320 likes | 405 Views
Reguläre Ausdrücke / regular expression. =~ m/^[w-]+@[.w-]+$/. 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.
E N D
=~ m/^[\w\-]+@[\.\w\-]+$/ P. Brezany
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
Reguläre Ausdrücke in der theoretischen Informatik Beispiel: (0|1)* 110000001…1111001100 Beispiel: (001)+ 001001001001001001001 P. Brezany
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
Perl (Practical Extraction and Report Language) #!/usr/bin/perl print "Hallo Welt! \n"; P. Brezany
Mustererkennung und Reguläre Ausdrücke in Perl =~ m/MUSTER/ =~ s/MUSTER/TEXT/ split(MUSTER,STRING) P. Brezany
Mustererkennung und Reguläre Ausdrücke in Perl #!/usr/bin/perl $satz = "Hallo Welt! \n"; if ($satz =~ m/Hallo/) { print "Hallo gefunden!"; } P. Brezany
Mustererkennung und Reguläre Ausdrücke in Perl #!/usr/bin/perl $satz = "Hallo Welt! \n"; $satz =~ s/Hallo/Tschau/; print $satz; P. Brezany
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
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
Mustererkennung und Reguläre Ausdrücke in Perl $satz = "3·Engel für Charlie!"; $satz =~ m/\D/; ⇒ true matcht ersteNicht-Ziffer (Leerzeichennach 3 und vor E) P. Brezany
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
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
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
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
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
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
Mustererkennung und Reguläre Ausdrücke in Perl $satz = "3 Engel für Charlie???"; $satz =~ m/Charlie\?+/; ⇒ true matcht: Charlie?, Charlie????,… 1 - nFragezeichen $satz =~ m/Charlie\?*/; ⇒ true matcht: Charlie auch ohne ? 0 - nFragezeichen P. Brezany
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
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 Teufel3 für Charlie!"; P. Brezany
Mustererkennung und Reguläre Ausdrücke in Perl $satz = "Teufel 1, Teufel 2 und Teufel 3."; $satz =~ s/(\d)/v$1.1/g; $satz = "Teufelv1.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
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
=~ m/^[\w\-]+@[\.\w\-]+$/ P. Brezany
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
\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
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
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
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
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
Mustererkennung und Reguläre Ausdrücke in Perl Aufgabe 5: $var = "Hände, Strände, Bände"; Ersetzen Sie ä durch ae. P. Brezany
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