Aller au contenu

remplacer une chaine par une autre


Sujets conseillés

Posté

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

Posté

Bonjour,

Essaie ceci :

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

Cela rendra l'expression régulière moins gourmande. ;)

Jean-Luc

Posté

la chaine test

[img=http://www.mathforu.com/transfertfichier/fichiers/1.gif]commentaire alt ![/img]

n'est pas remplacée par le code html. Elle n'est donc probablement pas identifiée comme une chaine devant être remplacée ...

Posté

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

Posté

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

Posté

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

Posté (modifié)

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
Posté

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.

Posté

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

Posté

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

Veuillez vous connecter pour commenter

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



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