Aller au contenu

Petit problème de balisage


hcplayer

Sujets conseillés

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 !

Lien vers le commentaire
Partager sur d’autres sites

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 ;)

Lien vers le commentaire
Partager sur d’autres sites

merci beaucoup pour ton aide dan ! :P

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 ?

Lien vers le commentaire
Partager sur d’autres sites

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é par TheRec
Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...