Login
Newsletter
Werbung

Mo, 19. Juli 1999, 00:00

Perl/CGI-Workshop, Teil 10

Perl/CGI-Workshop, Teil 10.

Metazeichen (2)

Die Metazeichen, die wir bisher kennengelernt haben, waren dazu geeignet, dem Perl-Interpreter mitzuteilen, was er matchen soll. Dann gibt es da noch die sog. Quantoren, die dazu verwendet werden, bestimmte Muster eine bestimmte Anzahl mal zu matchen.

So ein Quantor wird dabei hinter einen Ausdruck geschrieben. Da gibt es z.B. das "+", welches für ein oder mehrere Vorkommen des voranstehenden Ausdrucks steht. Wenn dieser Ausdruck nicht nur das unmittelbar davorstehende sein soll, können Sie natürlich auch Klammern verwenden:

#!/usr/bin/perl
# plus.pl -- by W. Jährling
$path = "/opt/gnome/bin";
if ($path =~ /^\/.+\/bin$/) {
 # Der Pfad ist ein absoluter (beginnt mit "/")
 # und endet mit "/bin" (ist aber nicht "/bin").
}
# Durch die entwerteten Schrägstriche (\/) wird
# der reguläre Ausdruck sehr unübersichtlich,
# weshalb man hier wohl die Option "m" verwenden würde,
# die es erlaubt, statt dem / die den Regexp begrenzen ein
# beliebiges anderes Zeichen zu verwenden:
if ($path =~ m#^/.+/bin$#) {
 # Der Pfad ist ein absoluter (beginnt mit "/")
 # und endet mit "/bin" (ist aber nicht "/bin").
}

Neben dem "+" gibt es noch einige andere Quantoren. Etwa den Stern, der für eine beliebige Anzahl des davorstehenden Ausdrucks steht, also auch gar kein Vorkommen:

#!/usr/bin/perl
# stern.pl -- by W. Jährling
$zeux = "a" x 5; # ergibt "aaaaa"
$zeux = "gg$zeux"; # ergibt "ggaaaaa"
if ($zeux =~ /g[aeiou]*$/) {
 # der String muss ein "g" enthalten,
 # das entweder am Ende des Strings steht
 # oder dem bis zum Ende des Strings ($) nur
 # noch Vokale folgen.
}
$zeux = "abacafax";
$zeux .= "XYZql"; # Hängt "XYZql" an $zeux an.
if ($zeux =~ /^(a[a-z])*[A-Z]/) {
 # Die Zeichenkette beginnt mit einem
 # Großbuchstaben, vor dem evtl. noch
 # abwechselnd "a"s und ein Kleinbuchstaben
 # stehen dürfen.
}

Desweiteren möchte ich Sie noch mit dem "?" bekanntmachen, welches in Regexps für ein oder null Vorkommen des davorstehenden Ausdrucks steht. Ich bin jetzt aber viel zu faul, dafür jetzt ein Beispiel zu schreiben.

Stattdessen möchte ich Ihnen jetzt einen Quantor vorstellen, der viel mehr kann als alle anderen zusammen:

#!/usr/bin/perl
# superman.pl -- by W. Jährling
$buchstabensuppe = "zdMUaFeztNpUnzAJTut";
if ($buchstabensuppe =~ /[a-z][A-Z]{2,4}[a-z]/) {
 # Enthält irgendwo 2 bis 4 Großbuchstaben,
 # die zwischen Kleinbuchstaben stehen.
}

{x,y} bedeutet also: Mindestens x mal, höchstens y mal. Dabei kann entweder x oder y weggelassen werden: {x,} bedeutet "x bis unendlich mal" und {,y} steht für höchstens y mal.

Vorerst wollen wir uns mal mit diesem Wissen über Regexps begnügen, wobei wir deren Potential nun noch nicht vollständig ausgeschöpft haben (wir werden nochmal darauf zurückkommen. Sie wissen jetzt aber, was Regexps sind und das sie ein extrem mächtiges Werkzeug sind (das aber leider recht fehleranfällig ist).

Kommentare (Insgesamt: 0 )
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung