ein Kapitel zurück                                           ein Kapitel weiter

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.

ein Kapitel zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf