Sie sehen schon es gibt unzählig viele flexible Möglichkeiten mit den Regulären
Ausdrücken. Wir werden noch unzählig viele Beispiele sehen und kennen lernen. Doch kommen wir zu einer weiteren Möglichkeit von Regulären Ausdrücken. Dem Suchen und
Ersetzen. Der Syntax von des Pattern Matching Ausdruck vom Suchen und Ersetzen sieht folgendermaßen aus....
$string =~ s/Suchemuster/Ersetzendurch/;
Im Gegensatz zum Suchen alleine ändert sich im Syntax nur das voranstellen von s und es
wird direkt im Anschluss des Suchstrings der Ersetzungsstring hinzugefügt.
Beim Suchen und Ersetzten können sie die selben Option setzen wie schon beim
Suchen im Kapitel zuvor. Und ebenso gelten die selben Regulären Ausdrücke wie wir sie schon
vom Kapitel zuvor gesehen haben.
Beginnen wir wieder mit der einfachsten Möglichkeit vom Suchen und Ersetzen.......
#!/usr/bin/perl -w
use strict;
while(<>){
if($_ =~ s/pronix/PRONIX/g) {
print "Ersetzt in Zeile " . $. , "\n";
print $_;
}
}
Damit ersetzten wir alle in dem Text vorkommenden Zeichenkette 'pronix' durch die
Großschreibung 'PRONIX'. Besonders häufig setze ich diese Suche und Ersetze-Methode
für meine Webseite ein......
#!/usr/bin/perl -w
use strict;
#my $file ="temp.html";
my $suche = "background-color:#E0E0E0";
my $ersetze = "background-color:#AEEEEE";
open (FH, "> $file")
or
die "Konnte $file nicht öffnen\n";
undef $/;
my $text = <>;
if($text =~ s/$suche/$ersetze/g){
print FH $text;
}
Mit Aufruf von.......
Programmname ./pronix/*.*
...werden alle sich im pronix befindlichen Dateien die Farbangabe nach meinem Wunsch
geändert.
Neu zu dem Kapitel zuvor ist das Flag /e
Mit diesem Flag wird der Ersetzungsstring durch eval() als Perlcode evaluiert.
Nehmen wir mal als einfaches Beispiel folgendes Programm...
#!/usr/bin/perl -w
use strict;
my $text = "Die Summe beträgt zahl";
print "Zahl 1 : ";
chomp (my $zahl1=<>);
print "Zahl 2 : ";
chomp (my $zahl2=<>);
my $summe=$zahl1+$zahl2;
$text =~ s/zahl/$summe/g;
print $text , "\n";
Bei diesem Programm wir der String zahl durch den Wert der Variable $summe ersetzt. Soweit
alles ok. Was aber wenn den String durch folgende Schreibweise ersetzten wollen...
$text =~ s/zahl/$zahl1+$zahl2/g;
In diesem Fall wird die Rechnung der beiden Zahlen ausgegeben, aber nicht das Ergebniss.
Wollen sie das Ergebniss ausgeben lassen brauchen sie nur das Flag /e am Ende anhängen. Schon wird der Ersetzungsstring durch die Funktion eval() als Perl-Code interpretiert...
#!/usr/bin/perl -w
use strict;
my $text = "Die Summe beträgt zahl";
print "Zahl 1 : ";
chomp (my $zahl1=<>);
print "Zahl 2 : ";
chomp (my $zahl2=<>);
$text =~ s/zahl/$zahl1+$zahl2/e;
print $text , "\n";
Diese Flag wir hauptsächlich dazu verwendet um die URL wie z.B.
%28webmaster%40pronix.de%29
...wird durch folgenden Code encodiert...
s/%([0-9A-Fa-f]2) / pack("c", hex($1))/eg;
Somit sieht die Ausgabe folgendermaßen aus...
(webmaster@pronix.de)
Mehr zur Dekodierung und Encodierung gibt es im Kapitel CGI-Programmierung.
© 2001,2002 Jürgen Wolf
|