Gerd Gruber: reg. Expr. gesucht ?

Beitrag lesen

Hallo,
ich versuche jetzt schon ziemlich lange vergebens einen regulären Ausdruck zu finden, der Links entdeckt. Mein momentaner Stand sieht so aus :

if ($changetext =~ /(http://[A-Za-z0-9._-%&?/]+?)/ig)   {
  my $tag = "<span class="farbmarkierung">$1</span>";
  $changetext =~ s/$1/$tag/;
  }

Ich würde statt deinem Teil folgendes schreiben:

if ($changetext =~ /(http|https)(://)([0-9a-z][0-9a-z-]+.)+([a-z]{2,4})([0-9a-z-/?%=+&._]*?)/){
     $changetext =~ s/(http|https)(://)([0-9a-z][0-9a-z-]+.)+([a-z]{2,4})([0-9a-z-/?%=+&._]*?)/<span class="farbmarkierung">$1$2$3$4$5</span>/gim;
}

dein ansatz ersetzt nur den ersten Link in $changetext

Er findet nur http://w  .
Und 2. würde ich noch gerne wissen, wie ich diese Schleife am Besten schreiben kann, dass ich nicht $1 verwenden muss, weil wenn ich zB $changetext statt $1 in der 2. Zeile einsetzt und die Klammern weglasse, kopiert er nachher irgendwie den Text ab der gefundenen Stelle und fügt ihn am Schluss wieder dran.
wenn ich überhaupt die $tag Zeile weglasse und direkt $1 mit <span...>$1</span> ersetze, schneidet er mir einfach des Gefundene weg.
Ich frage deswegen weil den ganzen Ausdruck einklammern ist ja wohl ziemlich uneffizient, aber wie gesagt, wenn ich $changetext direkt verwende, bekomme ich den Text plötzlich 2 Mal.
Was kann ich tun ?

$xNeTworKx.