Tim: regulärer ausdruck link ergänzen

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.

  1. 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;

  2. 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

  3. 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.