Recupération de liens avec pre_match_all

Bonjour,

J’ai écris une expression qui permet d’extraire un ou plusieurs liens
d’une chaîne :


<?php 
$texte="aaaa _http://www.clubic.com/forum/programmation bbbbbb _http://www.clubic.com/forum/programmation aaaa";
preg_match_all("/((ht|f)tps?:\/\/(.*) )/",$texte,$temp);
foreach($temp[0] as $i => $lib){
   echo "<br>".$lib;
}
?>

J’ai dû mettre un souligné devant le http pour eviter l’ajout des tags spéciaux de clubic
Mais le problème c’est qu’il me sort ça:
http://www.clubic.com/forum/programmation/ bbbbbb _http://www.clubic.com/forum/programmation/”
Une seule chaine au lieu de 2 (???)

Une petite idée siouplait?
thx
Edité le 14/02/2009 à 20:19

Parce que par défaut il est greedy : il cherche à matcher la chaine la plus longue => (.*)

Essaye ça dans ton pattern : (.*)?

Je viens de tester, alors quand je met
(.?) il me sort le sans texte, normal, et (.)? me sort la même chose…
:confused:

joue avec les options (/U je crois, regarde la doc).

Moi je ne pourrai pas plus t’aider car plus là :slight_smile:

tu quittes cluclu?

Sinon effectivement le /U solutionne le problème :
…(.*)?( |\\r\\n))/U, j’ai réjouté le ( |\\r\\n) au cas où il y aurait un retour à la ligne à la fin du lien au lieu d’un espace ^^
Merci pour ton aide :slight_smile:
Edité le 14/02/2009 à 22:55

Non, je pars en vacances.

ben…bonnes vacances alors ^^