Aller au contenu

remplacer une chaine par une autre


titiplanti

Sujets conseillés

Bonjour,

Afin d'améliorer le référencement des images de mon forum, j'essaye d'améliorer le BBcode. Pour cela je trifouille dans les fonctions de remplacement des chaines.

Je veux remplacer :

[img=http://urlimage]commentaire alt[/img]

par

<img src="http://urlimage" alt="commentaire alt" />

Voici le code que j'ai mis :

preg_replace("#\[img=(.*?)\](.*?)\[/img\]#si", "<img src=\"$1\" alt=\"$2\" />", $message);

mais qui ne fonctionne pas ...

Pouvez-vous m'aider ?

(Je suis sous php5.)

Lien vers le commentaire
Partager sur d’autres sites

J'ai vérifié sur deux testeurs de REGEX et les résultats étaient ok dans les deux cas.

Tu as bien ajouté l'opton de recherche U (inversion de la tendance à la gourmandise) ?

Jean-Luc

Lien vers le commentaire
Partager sur d’autres sites

A quoi sert ce paramètre U ? (je ne comprends pas pour la gourmandise)

Où sont les testeurs REGEX ?

Pour info, voici la ligne de code précédant celle que j'essaye de mettre en place :

    $message = preg_replace("#\[img\](.*?)\[/img\]#si", "<img src=\"\\1\" alt=\"\\1\" />", $message);

Lien vers le commentaire
Partager sur d’autres sites

La gourmandise, c'est le fait que, sans option spéciale, une expression régulière essaie de capturer un maximum de caractères. Avec l'option U, l'expression régulière capturera un minimum de caractères.

Exemple: tu veux capturer ce qui est entre [ img] et et il y a 3 images de ce type dans la page. Ce que tu captures est en vert:

- avec la gourmandise:

[ img]image 1 ... [ img]image 2 ... [ img]image 3

- sans la gourmandise (1 capture):

[ img]image 1 ... image 2 ... [ img]image 3

- sans la gourmandise (nombre illimité de captures):

[ img]image 1 ... [ img]image 2 ... [ img]image 3

J'espère que c'est clair.

Pour les testeurs de REGEX, il y a celui-ci : http://www.regextester.com/

et le mien en français ;) : http://www.annuaire-info.com/outil-referencement/expression-reguliere

La ligne de code à la fin de ton post ("précédant celle que j'essaye de mettre en place"), elle marche ?

Jean-Luc

Lien vers le commentaire
Partager sur d’autres sites

Clair oui, merci pour les explications.

La ligne de code à la fin de ton post ("précédant celle que j'essaye de mettre en place"), elle marche ?

Oui elle fonctionne très bien.

PS : tu devrais cliquer sur le second lien que tu donnes pour voir le piètre résultat ... (j'ai tout de même trouvé le testeur merci !)

Modifié par titiplanti
Lien vers le commentaire
Partager sur d’autres sites

Le bug concernant l'URL a été confirmé par Invision. JeanLuc n'y est pour rien :)

C'est le mot "expression" qui est remplacé par "expr<b></b>ression" dans les URLs.

Lien vers le commentaire
Partager sur d’autres sites

Oui non je n'ai jamais pensé que JeanLuc s'amusait à rajouter des <b></b> dans son url !

Pour en revenir à mon problème d'expression régulière, avez-vous d'autres idées même farfelues ? J'ai essayé de nombreuses choses sans que ça fonctionne : la chaine BBcode n'est pas reconnue ...

phpinfo() me donne PHP Version 5.2.4-2ubuntu5.7

Lien vers le commentaire
Partager sur d’autres sites

J'y perds mon latin. :wacko:

Deux suggestions :

- tu pourrais essayer en remplaçant les $1 et $2 par \\1 et \\2 (ça ne devrait rien changer, mais on ne sait jamais)

- soit dit en passant, tes (.*?) pourraient être remplacés par des (.*)

Jean-Luc

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...