[php] Le char avant une regexp...

BlueWolf² -  
 BlueWolf² -
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²
A voir également:

6 réponses

kilian Messages postés 8854 Statut Modérateur 1 526
 
C'est quoi le pattern de départ?
0
BlueWolf²
 
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
BlueWolf²
 
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²
 
up... (c'est pas pour le temps que ça prendra à un habitué des regexp)
0
rénolipus
 
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
BlueWolf²
 
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
rénolipus
 
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
BlueWolf²
 
ok merci, je vais essayer de me débrouiller avec ça. +
0