Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/01/2007, 20h45   #1
Membre Expert
 
Avatar de méphistopheles
 
Inscription : janvier 2005
Messages : 1 552
Détails du profil
Informations personnelles :
Âge : 25

Informations forums :
Inscription : janvier 2005
Messages : 1 552
Points : 1 212
Points : 1 212
Par défaut bblien qui ne fonctionne pas

bonjour.

j'ai essayé de faire un lien avec l'expression suivante:
Code :
$chaine=preg_replace('#\[url=(http://[[:alnum:]\-!\#$%&*+\\/.=?^_`{|}~;:]+\.[[:alnum:]]{1,63})\](.+)\[/url\]#iU','<a href="http://$1" target="blank">$2</a>',$message);//lien avec adresse non affichée
malheureusement, ça ne marche pas et j'ignore pourquoi...
si vous aviez une idée...

merci
__________________
Méphistophélès
Si la solution ne résout pas votre problème, changez le problème...
méphistopheles est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2007, 22h40   #2
Membre éclairé
 
Inscription : août 2006
Messages : 379
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : août 2006
Messages : 379
Points : 383
Points : 383
Bonsoir,

Essaye cela :
Code :
$chaine = preg_replace("/(\[url=(.[^\"\'\(\)\<\>\]\[]*?)\])(.*?)(\[\/url\])/i", "<a href=\"\\2\">\\3</a>", $message);
Bonne chance.

[EDIT] : Il y a aussi le $chaine qui est différent du $message ... il faudrait peut-être choisir l'un ou l'autre non ? (Je n'ai pas le code sous les yeux donc je peux le penser :'))
SpiritOfDoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2007, 23h01   #3
Membre Expert
 
Avatar de méphistopheles
 
Inscription : janvier 2005
Messages : 1 552
Détails du profil
Informations personnelles :
Âge : 25

Informations forums :
Inscription : janvier 2005
Messages : 1 552
Points : 1 212
Points : 1 212
non, pour le $chaine, c'est normal.

pour ton code, je l'ai un peu adapté pour qu'il vérifie la présence du http (je ne veut pas de ftp) et d'extention. il marche sans aucuns problème, mais j'aimerais savoir pourquoi le mien ne marche-t'il pas ?


merci.
__________________
Méphistophélès
Si la solution ne résout pas votre problème, changez le problème...
méphistopheles est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2007, 23h10   #4
Membre éclairé
 
Inscription : août 2006
Messages : 379
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : août 2006
Messages : 379
Points : 383
Points : 383
Je ne gère pas totalement ces expressions, mais ce qui m'a choqué c'est le #.

Je n'en avais encore jamais vu .

Peut-être que le problème vient de là.

[EDIT] : Non en faite y'a une FAQ :p
SpiritOfDoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2007, 07h36   #5
Membre Expert
 
Avatar de méphistopheles
 
Inscription : janvier 2005
Messages : 1 552
Détails du profil
Informations personnelles :
Âge : 25

Informations forums :
Inscription : janvier 2005
Messages : 1 552
Points : 1 212
Points : 1 212
non, les délimiteurs sont au choix, et pour ma part je préfere les '#' car ils sont moins utilisés que les '/' (ça fait mois de '\' à taper)

sinon, Théoriquement, mon code doit fonctionner comme ceci:bon, là, pas besoin d'xplications, c'est clair.
[CODE]#\ je ne veut que des url commençant par http.
bon, alors le premier crochet montre que c'est un choix. [:alnum:] désigne normalement 0-9a-zA-Z et les autres caractères à la suite sont cencé être les caractères autorisés (qui ne devraient pas avoir besoin de l'antislash si j'en crois le tutoriel du cyberzoïde). On ferme tout ça et + veut dire que j'en veut plusieurs.
)je veut une extention (.html,.com,...) qui se termine par entre 3 et 63 caractères alpahanumériques.
on ferme le crochet.
entre et . on met dans $2
on ferme le
on finis la regex, i pour ne pas tenir compte de la casse, U pour éviter les super liens.
Code :
,'<a href="http://$1" target="blank">$2</a>',$message);
bon, la c'est tout simple, je ne te ferais pas l'insulte de l'expliquer.

bref, si quelqu'un pouvais m'expliquer la cause de mon erreur...

merci



Edit: tiens, y'a un bug dans le code du forum: il tient compte du "[url] qui commence dans le code et continue apres.
faudra le signaler.
__________________
Méphistophélès
Si la solution ne résout pas votre problème, changez le problème...
méphistopheles est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2007, 18h17   #6
Membre habitué
 
Avatar de daniel61
 
Inscription : décembre 2006
Messages : 109
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 109
Points : 120
Points : 120
Code :
[[:alnum:]\-!\#$%&*+\\/.=?^_`{|}~;:]+
le deuxième bloc dit qu'il n'y a qu'un seul et unique point dans une adresse http... l'expression sera toujours en échec sur une adresse http.
daniel61 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2007, 18h52   #7
Membre Expert
 
Avatar de méphistopheles
 
Inscription : janvier 2005
Messages : 1 552
Détails du profil
Informations personnelles :
Âge : 25

Informations forums :
Inscription : janvier 2005
Messages : 1 552
Points : 1 212
Points : 1 212
non, ça veut dire un seul point avant l'extention puisque le point est autorisé dans l'expression précédente.
__________________
Méphistophélès
Si la solution ne résout pas votre problème, changez le problème...
méphistopheles est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2007, 19h48   #8
Membre habitué
 
Avatar de daniel61
 
Inscription : décembre 2006
Messages : 109
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 109
Points : 120
Points : 120
non, le premier point rencontré dans la chaine $message fera passer au second bloc "\.[[:alnum:]]{1,63}", aucun doute possible.

il faudrait un ancrage ou valider chaque point possible ou important comme:

Code :
1
2
 
$chaine=preg_replace('#\[url=http://([[:alnum:]]+\.[[:alnum:]-]+\.[[:alnum:]]+(?:[[:alnum:]\-!\#$%&*+\\/.=?^_`{|}~;:]+))\](.+)\[/url\]#iU','<a href="http://$1" target="blank">$2</a>',$message);
selon l'objectif.
daniel61 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2007, 10h55   #9
Membre Expert
 
Avatar de méphistopheles
 
Inscription : janvier 2005
Messages : 1 552
Détails du profil
Informations personnelles :
Âge : 25

Informations forums :
Inscription : janvier 2005
Messages : 1 552
Points : 1 212
Points : 1 212
ha d'accord.
je pensait qu'il ne cherchais que la forme.

merci beaucoup.
__________________
Méphistophélès
Si la solution ne résout pas votre problème, changez le problème...
méphistopheles est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h21.


 
 
 
 
Partenaires

Hébergement Web