Reguläre Ausdrücke / regular expression
P. Brezany2 =~
P. Brezany3 Mustererkennung und Reguläre Ausdrücke in Perl
P. Brezany4 Reguläre Ausdrücke in der theoretischen Informatik AlternativeAneinanderreihungWiederholung 0 oder 10 und 11 n (n ≥ 0) * 0|10111* = 1 + Beispiel:(0|1)* … Beispiel:(001)
P. Brezany5 Reguläre Ausdrücke in der Praxis [07/Feb/2006:16:30: ] "GET /~charlie/burka-girls/burka-girls/zeichnen.gif HTTP/1.1" " "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Crazy Browser 1.0.5;.NET CLR ;.NET CLR )" [07/Feb/2006:18:17: ] "GET /~charlie/fotos/down.gif HTTP/1.1" " "Mozilla/5.0 (Macintosh; U; PPC Mac OS X; de-de) AppleWebKit/ (KHTML, like Gecko) Safari/85.8" [07/Feb/2006:18:17: ] "GET /~charlie/fotos/private_fotos/archiv/iris_party01.jpg HTTP/1.1" " "Mozilla/5.0 (Macintosh; U; PPC Mac OS X; de-de) AppleWebKit/ (KHTML, like Gecko) Safari/85.8" …
P. Brezany6 Perl (Practical Extraction and Report Language) #!/usr/bin/perl print "Hallo Welt! \n";
P. Brezany7 Mustererkennung und Reguläre Ausdrücke in Perl =~ m/MUSTER/ =~ s/MUSTER/TEXT/ split(MUSTER,STRING)
P. Brezany8 Mustererkennung und Reguläre Ausdrücke in Perl #!/usr/bin/perl $satz = "Hallo Welt! \n"; if ($satz =~ m/Hallo/) { print "Hallo gefunden!"; }
P. Brezany9 Mustererkennung und Reguläre Ausdrücke in Perl #!/usr/bin/perl $satz = "Hallo Welt! \n"; $satz =~ s/Hallo/Tschau/; print $satz;
P. Brezany10 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. Brezany11 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. Brezany12 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. Brezany13 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. Brezany14 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. Brezany15 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. Brezany16 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. Brezany17 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. Brezany18 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. Brezany19 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. Brezany20 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. Brezany21 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. Brezany22 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. Brezany23 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 Buchstabenin $1 (.*) speichert die mittleren Buchstabenin $2 (.)$speichert den letzten Buchstabenin $3
P. Brezany24 =~
P. Brezany25 Mustererkennung und Reguläre Ausdrücke in Perl Beispiel: Adresse? $ =~ Beispiel: Österreichische Postleitzahl? $plz =~ m/A\s*-\s*\d{4}$/; Beispiel: whitespace vorne und hinten entfernen… $name =~ s/^\s*(.*?)\s*$/$1/;
P. Brezany26 \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. Brezany27 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. Brezany28 Mustererkennung und Reguläre Ausdrücke in Perl Aufgabe 2: if ( $ =~ m/(:|;)-\)/ ) { print "Smile!"; } Welches Muster wird hier erkannt? Wann wird Smile! ausgegeben?
P. Brezany29 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.: a ). Folgende Regeln gilt es einzuhalten: Ein UNET-Login beginnt mit einem a. Danach folgen 7 (beliebigen) Ziffern.
P. Brezany30 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. Brezany31 Mustererkennung und Reguläre Ausdrücke in Perl Aufgabe 5: $var = "Hände, Strände, Bände"; Ersetzen Sie ä durch ae.
P. Brezany32 Mustererkennung und Reguläre Ausdrücke in Perl Aufgabe 6: $ =~ Dieser Ausdruck zum matchen von Adressen ist nicht perfekt. Suchen Sie Beispiele für a) gültige / vernüftige / realistische Adressen, die nicht gematcht werden. b) unsinnige / unrealistische Adressen, die gematcht werden.
P. Brezany33 GREP Program (Unix/Linux Utility)
P. Brezany34 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. Brezany35 Mustererkennung und Reguläre Ausdrücke mit grep Optionen: grep -valle Zeilen die nicht das Muster enthalten grep -nmit Zeilennummer vor der Zeile grep -iignoriert Groß/Kleinschreibung grep -lgibt (nur) den Dateinamen aus grep -cgibt (nur) die Anzahl der Zeilen grep -A 3gibt nach der Zeile noch 3 weitere Zeilen aus grep -Eoder 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. Brezany36 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. Brezany37 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. Brezany38 Mustererkennung und Reguläre Ausdrücke mit grep ^Zeilenanfang und Zeilenende$ grep '^$' joke1 findet alle Leerzeilen übrigens: ^ ist der Zirkumflex oder das Caret
P. Brezany39 Mustererkennung und Reguläre Ausdrücke mit grep.- irgendein beliebiges Zeichen *- null oder mehrere Male den letzten Ausdruck \- zum maskieren von 'Sonderzeichen'
P. Brezany40 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. Brezany41 -