Thread Regexp: Ersetzungsausdruck mitbenutzen (25 answers)
Opened by #Kein Kommentar at 2008-07-12 21:22

Linuxer
 2008-07-12 21:49
#112035 #112035
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
Hi,

[s]im Ersetzungsteil solltest Du $1 anstatt \1 benutzen.[/s]
[s]edit: Musst natürlich drauf achten, dass es beim Zusammenbauen von $replace vor Interpolation geschützt ist; also wie bereits von Dir gemacht, einfache Hochkommata oder q~~ verwenden, oder mit 'nem Backslash maskieren.[/s]

[s]$text =~ s/$find/$replace/ge;[/s]
[s]Der Modifier /e sollte das sein, was Du brauchst.[/s]

update: Hm, zu schnell aus der Hüfte geschossen. :o((
Will doch nicht so, wie ich mir das gedacht hatte....

update2:
pq's Gedanke an quotemeta() gewürdigt, kommt meine parallel zu ihr entwickelte lösung auf folgendes:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
my $string    = "test test %ae, test %ue test, %oe";

my $find    = "%(ae|oe|ue)";
my $replace    = '#\1;';

# pq's Lorbeeren hinzugefuegt
$replace = quotemeta $replace;
$replace =~ s/\\\\(\d)/\$$1/g;

# meine Beerchen ;)
eval "\$string =~ s/$find/$replace/g;";
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread Regexp: Ersetzungsausdruck mitbenutzen