hcplayer Posté 1 Mars 2006 Posté 1 Mars 2006 Bonjour, je poste dans le forum php, mais à dire vrai, j'ai plus un problème de regex. Pour un site qui se veut Accessiweb or, je cré un petit langage de balise dans pretention qui permet d'ajouter entre autre des images. Pour une image, aucun soucis, le soucis vient de quand j'insère 2 images voila mon code : $balises_saisies[] = "#\[image=([a-zA-Z0-9 ]+)\]([^?\n\r\t].*?)\[/image\]\[(droite|gauche)\]#is"; $replace[] = "<img alt=\"\\1\" src=\"\\2\" class=\"\\3\" />"; $balises_saisies[] = "#\[image=([a-zA-Z0-9 ]+)\]([^?\n\r\t].*?)\[/image\]#is"; $replace[] = "<img alt=\"\\1\" src=\"\\2\" />"; $texte = preg_replace($balises_saisies, $replace, $texte); et un exemple d'insertion dans le formulaire: [image=Logo aide]images/upload/68/logo-aide.gif[/image] [image=Logo compagnon]images/upload/68/logo-compagnon.gif[/image][gauche] en fait, ca me prend (en rouge) [image=Logo aide]images/upload/68/logo-aide.gif[/image] [image=Logo compagnon]images/upload/68/logo-compagnon.gif[/image][gauche] Ca me prends tout ce qui est en rouge au lieu de ne me prendre que ce que je souhaite, n'étant pas une star internationale de la regex, et commençant à avoir mal à la tête, je demande votre aide Merci d'avance !
Dan Posté 1 Mars 2006 Posté 1 Mars 2006 Ce code marche bien chez moi: $texte="[image=Logo aide]images/upload/68/logo-aide.gif[/image][image=Logo compagnon]images/upload/68/logo-compagnon.gif[/image][gauche]";$balises_saisies[] = "#\[image=([^]]+)\]([^[]*)\[/image\]\[(droite|gauche)\]#is";$replace[] = "<img alt=\"\\1\" src=\"\\2\" class=\"\\3\" />";$balises_saisies[] = "#\[image=([^]]+)\]([^[]*)\[/image\]#is";$replace[] = "<img alt=\"\\1\" src=\"\\2\" />";$texte = preg_replace($balises_saisies, $replace, $texte);print $texte; Le code généré est dans ce cas: <img alt="Logo aide" src="images/upload/68/logo-aide.gif" /><img alt="Logo compagnon" src="images/upload/68/logo-compagnon.gif" class="gauche" /></body> Dan
hcplayer Posté 2 Mars 2006 Auteur Posté 2 Mars 2006 merci beaucoup pour ton aide dan ! Une petite question, j'utilise "#is" (ou autre) à la fin des expressions que pour l'avoir vu sur php.net, mais je n'ai pas trouvé de doc, expliquant ce à quoi ça sert, connaissez vous une doc ?
TheRec Posté 2 Mars 2006 Posté 2 Mars 2006 (modifié) Bonjour, les options de recherche du module PCRE sont données dans le manuel PHP également. s (PCRE_DOTALL) Avec cette option, le méta-caractère point (.) remplace n'importe quel caractère, y compris les nouvelles lignes. Sans cette option, le caractère point ne remplace pas les nouvelles lignes. Cette option est équivalente à l'option Perl /s. Une classe de caractères négative telle que [^a] acceptera toujours les caractères de nouvelles lignes, indépendamment de cette option. Dans ton cas entre autres cela permet de faire correspondre des balises ouvrantes/fermantes qui ne se trouvent pas sur le même ligne (qui contiennent des saut de ligne). Le "i" quant à lui permet de faire une comparaison ne prêtant pas attention à la casse (majuscules/minuscules). Le fait que tu utilises "#" come délimiteur de ta pattern d'expression régulière est peu important, il est usuel d'utiliser le "/" mais dans ton cas tu l'utilises comme caractère devant être trouvé, tu as raison d'en utilliser un autre (#) Modifié 2 Mars 2006 par TheRec
hcplayer Posté 2 Mars 2006 Auteur Posté 2 Mars 2006 Merci beaucoup de ton lien et de tes lumières therec
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant