32
Reguläre Ausdrücke / regular expression

Reguläre Ausdrücke / regular expression. P. Brezany2 =~ m/^[\w\-]+@[\.\w\-]+$

Embed Size (px)

Citation preview

Page 1: Reguläre Ausdrücke / regular expression. P. Brezany2 =~ m/^[\w\-]+@[\.\w\-]+$

Reguläre Ausdrücke / regular expression

Page 2: Reguläre Ausdrücke / regular expression. P. Brezany2 =~ m/^[\w\-]+@[\.\w\-]+$

P. Brezany 2

=~ m/^[\w\-]+@[\.\w\-]+$/

Page 3: Reguläre Ausdrücke / regular expression. P. Brezany2 =~ 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

Page 4: Reguläre Ausdrücke / regular expression. P. Brezany2 =~ m/^[\w\-]+@[\.\w\-]+$

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

Page 5: Reguläre Ausdrücke / regular expression. P. Brezany2 =~ m/^[\w\-]+@[\.\w\-]+$

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

Page 6: Reguläre Ausdrücke / regular expression. P. Brezany2 =~ m/^[\w\-]+@[\.\w\-]+$

P. Brezany 6

Perl (Practical Extraction and Report Language)

#!/usr/bin/perlprint "Hallo Welt! \n";

Page 7: Reguläre Ausdrücke / regular expression. P. Brezany2 =~ m/^[\w\-]+@[\.\w\-]+$

P. Brezany 7

Mustererkennung und Reguläre Ausdrücke in Perl

=~ m/MUSTER/

=~ s/MUSTER/TEXT/

split(MUSTER,STRING)

Page 8: Reguläre Ausdrücke / regular expression. P. Brezany2 =~ m/^[\w\-]+@[\.\w\-]+$

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!"; }

Page 9: Reguläre Ausdrücke / regular expression. P. Brezany2 =~ m/^[\w\-]+@[\.\w\-]+$

P. Brezany 9

Mustererkennung und Reguläre Ausdrücke in Perl

#!/usr/bin/perl$satz = "Hallo Welt! \n";$satz =~ s/Hallo/Tschau/;print $satz;

Page 10: Reguläre Ausdrücke / regular expression. P. Brezany2 =~ m/^[\w\-]+@[\.\w\-]+$

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

Page 11: Reguläre Ausdrücke / regular expression. P. Brezany2 =~ m/^[\w\-]+@[\.\w\-]+$

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)

Page 12: Reguläre Ausdrücke / regular expression. P. Brezany2 =~ m/^[\w\-]+@[\.\w\-]+$

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)

Page 13: Reguläre Ausdrücke / regular expression. P. Brezany2 =~ m/^[\w\-]+@[\.\w\-]+$

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

Page 14: Reguläre Ausdrücke / regular expression. P. Brezany2 =~ m/^[\w\-]+@[\.\w\-]+$

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.

Page 15: Reguläre Ausdrücke / regular expression. P. Brezany2 =~ m/^[\w\-]+@[\.\w\-]+$

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

Page 16: Reguläre Ausdrücke / regular expression. P. Brezany2 =~ m/^[\w\-]+@[\.\w\-]+$

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

Page 17: Reguläre Ausdrücke / regular expression. P. Brezany2 =~ m/^[\w\-]+@[\.\w\-]+$

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.

Page 18: Reguläre Ausdrücke / regular expression. P. Brezany2 =~ m/^[\w\-]+@[\.\w\-]+$

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

Page 19: Reguläre Ausdrücke / regular expression. P. Brezany2 =~ m/^[\w\-]+@[\.\w\-]+$

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

Page 20: Reguläre Ausdrücke / regular expression. P. Brezany2 =~ m/^[\w\-]+@[\.\w\-]+$

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.

Page 21: Reguläre Ausdrücke / regular expression. P. Brezany2 =~ m/^[\w\-]+@[\.\w\-]+$

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!";

Page 22: Reguläre Ausdrücke / regular expression. P. Brezany2 =~ m/^[\w\-]+@[\.\w\-]+$

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.

Page 23: Reguläre Ausdrücke / regular expression. P. Brezany2 =~ m/^[\w\-]+@[\.\w\-]+$

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

Page 24: Reguläre Ausdrücke / regular expression. P. Brezany2 =~ m/^[\w\-]+@[\.\w\-]+$

P. Brezany 24

=~ m/^[\w\-]+@[\.\w\-]+$/

Page 25: Reguläre Ausdrücke / regular expression. P. Brezany2 =~ 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/;

Page 26: Reguläre Ausdrücke / regular expression. P. Brezany2 =~ m/^[\w\-]+@[\.\w\-]+$

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)

Page 27: Reguläre Ausdrücke / regular expression. P. Brezany2 =~ m/^[\w\-]+@[\.\w\-]+$

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/)

Page 28: Reguläre Ausdrücke / regular expression. P. Brezany2 =~ m/^[\w\-]+@[\.\w\-]+$

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?

Page 29: Reguläre Ausdrücke / regular expression. P. Brezany2 =~ m/^[\w\-]+@[\.\w\-]+$

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.

Page 30: Reguläre Ausdrücke / regular expression. P. Brezany2 =~ m/^[\w\-]+@[\.\w\-]+$

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.

Page 31: Reguläre Ausdrücke / regular expression. P. Brezany2 =~ m/^[\w\-]+@[\.\w\-]+$

P. Brezany 31

Mustererkennung und Reguläre Ausdrücke in Perl

Aufgabe 5:

$var = "Hände, Strände, Bände";

Ersetzen Sie ä durch ae.

Page 32: Reguläre Ausdrücke / regular expression. P. Brezany2 =~ m/^[\w\-]+@[\.\w\-]+$

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.