Artikel im Internet unter http://www.hidemail.de/blog/perl-code-ausfuehren-in-regular-expression.shtml.
Dienstag, 30.1.2007, 11:50:26 Uhr

Perl-Code ausführen in einer Regular Expression


Ich hatte mal das Problem, daß ich in einem regulären Ausdruck zusätzlich Code ausführen mußte (wollte).

Also, flugs im perlretut nachgelesen, alles auf Englisch gefunden, Hälfte verstanden und dann lang herumprobiert, denn im perlretut steht, daß es prinzipiell funktionieren müßte.

Also, mal so zum Testen, folgende Problemstellung:

Man hat ein Skalar "Farbe Rot Farbe Grün Farbe Gelb Farbe Blau".

Man möchte jetzt jedesmal das Wort Farbe nummerieren, beginnend mit 1.

Also, folgender Code

$a="Farbe Rot Farbe Grün Farbe Gelb Farbe Blau";
$counter=1;
$a=~ s/(Farbe)/$1.$counter++/ge;
print $a;


Ausgabe:
Farbe1 Rot Farbe2 Grün Farbe3 Gelb Farbe4 Blau


Und warum ist das so?
Also, im perlretut steht, grob übersetzt, daß das e hinter dem letzten / dafür sorgt, daß der Teil, der für das Ersetzen zuständig ist, wie ein eval() behandelt wird.
Es wird also Farbe gefunden, in $1 gespeichert, dann eval($1.$counter++), also $counter erhöht und zu Farbe1, und schließlich das Original Farbe ersetzt.
Das g hinter dem letzten / gibt an, daß diese Prozedur global, also für alle Elemente, durchgeführt wird. Ohne das g wäre nur das erste Farbe ersetzt worden.


Alles etwas hardcore, aber ich hoffe, das Beispiel war verständlich...

Ein kleines weiteres Beispiel gibts hier

Artikel im Internet unter http://www.hidemail.de/blog/perl-code-ausfuehren-in-regular-expression.shtml.