[php] Le char avant une regexp...

Fermé
BlueWolf² - 14 août 2007 à 17:40
 BlueWolf² - 15 août 2007 à 13:25
Bonjour à tous !

Bon, alors, je présent mon souci, qui ne devrait pas en être un pour les habitués (je débute en ce qui concerne les expressions régulières).

Je souhaite remplacer un pattern par un autre (jusque-là, je m'en sors à peu près), sauf s'il est précédé d'un quote, et je souhaite également que la chaîne s'arrête si jamais elle rencontre un quote (ça, bizarrement, ça paraît simple au premier abord, mais je n'y suis pas arrivé).

Merci par avance...

BW²

6 réponses

kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
14 août 2007 à 17:54
C'est quoi le pattern de départ?
0
Pour l'instant, je fais un :

ereg_replace("(http://)((:punct:|:alnum:)*)", "<a href=\"\\0\" target=\"_blank\">\\0</a>", $data);

Le but est apparent : placer automatiquement les url par des liens. L'ennui, c'est qu'il m'arrive d'utiliser des url pour afficher des images distantes (<img src="http://trucbidule") et que du coup, le lien devient indésirable.
0
heurf... N'a été un peu altéré par le système en place sur ce forum, qui paraît fonctionner comme je voudrais que le mien fonctionne... Mais du coup, vous avez perdu les doubles crochets...
0
BlueWolf² > BlueWolf²
14 août 2007 à 21:40
up... (c'est pas pour le temps que ça prendra à un habitué des regexp)
0
Salut,

Il suffit d'utiliser une assertion arrière pour détecter si l'url est précédée d'un guillemet.
$chaine = preg_replace('#(?<!")http://(?:www\.)[a-z0-9_%/\?\-+&;]{3,}#', '<a href="$0">$0</a>', $chaine);
0
Merci beaucoup !

Mais par contre, avec le modèle que j'ai actuellement, comment puis-je m'assurer que la chaîne s'arrête pile avant un caractère spécifié (comme un autre quote, par exemple)...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Je n'ai pas bien compris ce que tu veux faire.

Sinon, au lieu d'utiliser une assertion, on peut aussi regarder si l'url est entourée d'espaces blancs.
$chaine = preg_replace('#(\s|^)(http://(?:www\.)?[a-z0-9_%/.?\-+&;]{3,})(\s|$)#U', '$1<a href="$2">$2</a>$3', $chaine);
0
ok merci, je vais essayer de me débrouiller avec ça. +
0