410 likes | 507 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/^\?/; ⇒ false matcht: ein Fragezeichen im String, das am String-Anfang stehen muss 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 = "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
GREP Program (Unix/Linux Utility) P. Brezany
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
My dog's got no nose. How does he smell? Awful. 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 P. Brezany
My dog's got no nose. How does he smell? Awful. 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? P. Brezany
My dog's got no nose. How does he smell? Awful. 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 P. Brezany
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
Mustererkennung und Reguläre Ausdrücke mit grep . - irgendein beliebiges Zeichen * - null oder mehrere Male den letzten Ausdruck \ - zum maskieren von 'Sonderzeichen' P. Brezany
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
- P. Brezany