regulärer ausdruck link ergänzen
Tim
- perl
hab da ein problem, möchte gerne in einem string alle inks mit "&my=24" ergänzen, mit meinem ausdruck wir aber nur der letzte ergänzt, irgendwie übersieht er das erste vorkommen von ">
$t = '<A href="http://www.test.de/cgi-bin/script/anfang.pl?ID=3">Link</A>Bla Bla<A href="http://www.test.de/cgi-bin/script/anfang.pl?ID=5">Link2</A>';
$t =~ s/(<a[ ,\n]+href=")(.*)(">)/$1$2&my=24$3/i;
print $t;
print "\n1: $1 ";
print "\n2: $2 ";
ergebnis:
<A href="http://www.test.de/cgi-bin/script/anfang.pl?ID=3">Link</A>Bla Bla<A href="http://www.test.de/cgi-bin/script/anfang.pl?ID=5&my=24">Link2</A>
1: <A href="
2: http://www.test.de/cgi-bin/script/anfang.pl?ID=3">Link</A>Bla Bla<A href="http://www.test.de/cgi-bin/script/anfang.pl?ID=5
was läuft da schief?
vielen dank.
hatte das g vergessen für global, hatte ich nur für testzwecke rausgenommen, das ist NICHT der fehler...
$t =~ s/(<a[ ,\n]+href=")(.*)(">)/$1$2&my=24$3/gi;
Perl ist standardmäßig greedy, versucht also möglichst große Blöcke für dein (.*) zu finden.
http://www.troubleshooters.com/codecorn/littperl/perlreg.htm#Greedy
Ich kann eigentlich kein Perl, aber nach dem Link da zu urteilen musst du (.*?) statt (.*) schreiben
jo, das wars vielen dank, hatte aber noch einen fehler, man solle nur bis zum " suchen und nicht bis "> kann ja sein das href noch optionen hat.
$t =~ s/(<a[ ,\n]+href=")(.*?)(")/$1$2&my=24$3/gi;
so funzt es prima.
vielen dank nochmal.