Login
Newsletter
Werbung

Fr, 9. Juli 1999, 00:00

Perl/CGI-Workshop, Teil 9

Perl/CGI-Workshop, Teil 9.

Metazeichen (1)

Eben haben wir gesehen, dass Regexps eine praktische Sache sind. Nun werden wir uns die erweiterten Möglichkeiten, die diese bieten, mal näher anschauen. Entschuldigen Sie dieses Gelaber, aber ich muss mich bei jedem Kapitel erstmal wieder "warmschreiben" *g*.

Die meisten Zeichen stehen in Regexps für sich selbst. Dies sind vor allem Buchstaben und Zahlen. Beim Finden von Übereinstimmungen ("matchen") darf an der jeweiligen Stelle in der Zeichenkette also dieses eine Zeichen stehen und kein anderes. Der Punkt hingegen matcht ein beliebiges Zeichen:

#!/usr/bin/perl
# regexp2.pl -- by W. Jährling
$version = "Linux 2.0.36";
if ($version =~ /2\.0\.../) {
 # Mindestens 2.0.10
 print "Blabla Blabla...\n";
}

Wenn ein "echter" Punkt gematcht werden soll, muss dieser mit dem Backslash wie üblich entwertet werden.

Sie können auch die Zeichen, die an entsprechender Stelle gematcht werden sollen, einschränken. Dies geht mit den eckigen Klammern:

#!/usr/bin/perl
# regexp3.pl -- by W. Jährling
$version = "Linux 2.0.36";
if ($version =~ /2\.0\.[0-9][0-9]/) {
 # Mindestens 2.0.10 und zwar wirklich korrekt!
 # Hier würde "2.0.gg" nicht mehr gematcht!
 print "Erfolg! Jubel! *freu*\n";
}
$text = <STDIN>;
if ($text =~ /[aeiouAEIOU]/) {
 print "Ei, da ist ja ein Vokal drin!\n";
}

Interessant ist auch die Möglichkeit der Anker, die das Auswerten von Regexps enorm beschleunigen. Sie haben dadurch die Möglichkeit, einen regulärgen Ausdruck an den Anfang oder das Ende eines Strings zu verankern:

#!/usr/bin/perl
# anchor.pl -- by W. Jährling
$os = "Sinix";
if ($os =~ /[xX]$/) { # $ bedeutet: Ende des Strings
 # Am Ende des Strings steht ein "x"!
 print "Vermutlich ein unixoides System! Eine gute Wahl!\n";
}
$shell = "bash 2.02.1";
if ($shell =~ /^sh/) { # ^ bedeutet: Anfang des Strings
 # "bash" wird NICHT gematcht!
 print "Es wird eine 'sh'-Shell verwendet.\n";
}
$text = "";
if ($text =~ /^$/) {
 # Nullstring gematcht! Vorsicht:
 # // matcht *alles*! Nicht nur den Nullstring!
}

Dann gibt es da noch den Alternativ-Operator:

#!/usr/bin/perl
# regexp4.pl -- by W. Jährling
$sys = "Linux i586";
if ($sys =~ /(GNU|Linux) i[4-9]86/) {
 # Linux oder GNU auf einem 486er oder höher!
}

(abx|xyz) bedeutet also: "abc oder xyz".

Neben den hier beschriebenen Metazeichen gibt es noch eine weitere interessante Metazeichen-Gruppe. Dieser werden wir uns im Folgenden zuwenden.

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