Sven Rautenberg: Reg. Exp., die Zweite

Beitrag lesen

Hallo,

ich hab da ein kleines Problem. Ich habe einen regulären Ausdruck, der Übereinstimmungen in einem Text umwandelt :

while ($text =~ /[link](.+)[/link]/g)   {
      my $image = "<a href="$1" target="parent">$1</a>";
      $text =~ s/[link].+[/link]/$image/;
      }

Jetzt ist es aber so, wenn es im Text so aussieht [link]blablabla.html[/link] mehr text mehr text [link]neuerlink.html[/link] , er alles zwischen dem ersten [link] und letzten [/link] als Link sieht. Wie kann ich den regulären Ausdruck so ändern, daß er jeden Link seperat erkennt ?

Mit (.+) suchst du zwischen den beiden Ausdrücken [link] und [/link] nach MAXIMAL VIELEN Zeichen (greedy - gierig).

Abhilfe: Nimm (.+?) Das Fragezeichen macht den Suchoperator non-greedy, du suchst nach MINIMAL WENIGEN Zeichen (würde schon helfen).

Oder du suchst nach "[link]", dann nach allem, was NICHT "[/link]" ist, und dann nach "[/link]".

Du solltest beachten, daß Leute auch dummes Zeug in die URL eingeben könnten. Vielleicht ist es schlauer, genau wie in diesem Forum lieber nach "[link]GÜLTIGE_URL[/link]" zu suchen, und nicht nur nach irgendwelchen beliebigen Zeichen.

- Sven Rautenberg