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