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 05/06/2007, 22h57   #1
Membre du Club
 
Inscription : janvier 2006
Messages : 160
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2006
Messages : 160
Points : 45
Points : 45
Par défaut double bbcode [image] et maintenant [url]

Bonsoir à tous

j'ai un problème avec une balise image, j'ai utilisé preg_replace pour la balise image :

Code :
$content = preg_replace("#\[image\](.+)\[\/image\]#", "<img src=\"$1\" border=\"0\" alt=\"\">", $content);
ça marche pour une image mais si je veux mettre 2 images côtes ) côtes ça ne marche pas, voila ce que ça fait :

Code :
<img src="http://www.teeshotweb.com/tutorial/upload/0605024946.jpg[/image][image]http://www.teeshotweb.com/tutorial/upload/0605024916.jpg" border="0" alt="">
ça ne prend pas en compte le 2 ème bbcode [image].
même si je mets par exemple un - entre les 2 balises, ça fait pareil.

Une idée ?

Merci
Tee shot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2007, 23h39   #2
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Il faut rendre votre expression régulière non gourmande, pour cela le moyen le plus simple est d'utiliser l'option U :
Code :
$content = preg_replace("#\[image\](.+)\[\/image\]#U", "<img src=\"$1\" border=\"0\" alt=\"\">", $content);
La gourmandise c'est le comportement par défaut des expressions régulières en PHP qui consiste, pour un motif, à chercher la correspondance la plus longue possible.

Vous pourriez en avoir besoin d'autres : i pour que vos balises bbcode soient insensibles à la casse ou encore s pour que le métacaractère . puisse désigner une nouvelle ligne (ce n'est pas le cas par défaut où il désigne tout caractère à l'exception d'un saut de ligne).
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2007, 00h02   #3
Membre du Club
 
Inscription : janvier 2006
Messages : 160
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2006
Messages : 160
Points : 45
Points : 45
Bonsoir julp

ça marche, merci.

Et bah plus j'avance et plus je vois que c'est vaste, j'ai un encore enormèment de boulot pour apprendre !!!

A bientôt
Tee shot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2007, 13h27   #4
Membre du Club
 
Inscription : janvier 2006
Messages : 160
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2006
Messages : 160
Points : 45
Points : 45
Re bonjour

C'est encore moi.

j'ai le même problème avec le bbcode url
j'ai pourtant mis le U, mais la c'est encore pire en le mettant, ça fait lien jusqu'au dernier [/url] de la page, si j'enleve le U ça se limite au 2 premiers.
Code :
1
2
3
 
$content = preg_replace("#\[url\](.+)\[\/url\]#U", "<a href=\"$1\" target=\"_blank\">$1</a>", $content);
	$content = preg_replace("#\[url=([\s\S]*?)\](.+)\[\/url\]#U", "<a href=\"$1\" target=\"_blank\">$2</a>", $content);
que puis je faire ?

Merci
Tee shot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2007, 13h36   #5
Membre chevronné
 
Avatar de Korko Fain
 
Étudiant
Inscription : août 2005
Messages : 632
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2005
Messages : 632
Points : 632
Points : 632
Code :
1
2
3
$content = preg_replace("#\[url](.+?)\[/url]#", "<a href=\"$1\" target=\"_blank\">$1</a>", $content);
 
$content = preg_replace("#\[url=([^]]+?)](.+?)\[/url]#", "<a href=\"$1\" target=\"_blank\">$2</a>", $content);
Le ? ICI (attention ça change selon les cas) correspond à la meme chose que le U à la fin.
Korko Fain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2007, 13h43   #6
Membre du Club
 
Inscription : janvier 2006
Messages : 160
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2006
Messages : 160
Points : 45
Points : 45
Bonjour Korko Fain

merci de ton aide ça marche parfaitement.

je ne m'en sortait pas il y a 2mn

sinon comment savoir si U ou ? est le mieux ?

A bientôt
Tee shot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2007, 14h07   #7
Membre chevronné
 
Avatar de Korko Fain
 
Étudiant
Inscription : août 2005
Messages : 632
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2005
Messages : 632
Points : 632
Points : 632
enfait, le ? à au moins 2 sens. s'il suit un + ou une * sont sens est similaire au U à la fin. Sinon, il veux dire 0 ou 1 fois ce qui précède directement.

Le U est global à tout le masque de recherche (la regex) alors que le ? est locale à ce que tu cherches.

Si ton mode 'non gourmand' est sur tout ton masque, tu peux choisir les 2, soit mettre un ? apres chaque *, + ou bien mettre un U à la fin (mais pas les 2!!). Donc quand tu en as 1 ou 2, c'est vraiment comme tu veux, apres on préfère le U c'est moins lourd à lire :p

Dailleurs, regarde ton 2eme masque que tu as donné, tu as un \S*? et à la fin tu as un U, tu as donc un mixe des 2 et donc ça bug :p
Korko Fain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2007, 14h31   #8
Membre du Club
 
Inscription : janvier 2006
Messages : 160
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2006
Messages : 160
Points : 45
Points : 45
Ok merci Korko Fain, je comprend mieux, mais c'est un peu dur tellement il y a de truc à savoir.

maintenant je connais au moins la différence entre U et le ?

Bonne journée
Tee shot 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 19h53.


 
 
 
 
Partenaires

Hébergement Web