probleme de slash dans une expression reguliere

pssinjaune

WRInaute discret
Bonjour a tous,

Je galère un peu sur un probleme que je rencontre lors d'un developpement.

J'ai dans des articles, plusieures images que je souhaiterais redimensionner a la volée.
Je parviens a recuperer les balises images extraite d'un article dans un tableau mais je n'arrive pas a "pondre" l'expression reguliere qui me permettra de changer la taille (width, height) de celle ci.

Ce que je fais actuellement:
-Je liste les images contenu dans un article du type <img src="http://www.test.com/lol.jpg" alt="" width="35" height="118" />

-J'extrait les elements src, alt, width et height pour chaque images contenu grace a la fonction suivante:
$match = "<img src=\"http://www.test.com/lol.jpg\" alt=\"\" width=\"35\" height=\"118\" />";
preg_match_all("/(src|alt|height|width)*= *[\"\']{0,1}([^\"\'\ \>]*)/i",$match, $m);


-Et ensuite, et c'est la que ca bloque, j'essaye de re-ecrire l'image en utilisant les infos ci-dessus et en me servant de l'element src comme identifiant:
content = preg_replace('/<img(.*?)(src=\"http://www.test.com/lol.jpg\")(.*?)>/', ' IMAGE DE REMPLACEMENT ', $contenu);

Le problème vient de fait qu'il y a des / dans l'expression reguliere et qu'il faut mettre des \ d'echapement devant,
La fonction de remplacement marche si je l'utilise comme celà:
content = preg_replace('/<img(.*?)(src=\"http:\/\/www.test.com\/lol.jpg\")(.*?)>/', ' IMAGE DE REMPLACEMENT ', $contenu);

Le problème est que je ne connais pas l'url à l'avance, et je ne sait pas comment mettre un antislash devant chaque slash contenu dans l'url

Si quelqu'un pouvait me dire comment faire celà ou plus simple, je suis preneur !

merci d'avance pour votre aide
 

jcaron

WRInaute accro
Je pense qu'il est temps que tu ailles lire la doc, tu verras, tu vas y apprendre plein de choses.

Par exemple:-
- tu peux utiliser n'importe quel autre délimiteur que / dans une regex: le délimiteur, c'est le premier et le dernier caractère (moins les flags genre i à la fin). Si tu utilises autre chose que / (les grands classiques sont # ou @ par exemple), tu pourras mettre des / à l'intérieur sans les escaper. Donc '#toto/tata#' est équivalent à '/toto\/tata/'

- * coresspondant à un nombre quelconque de répétitions, y compris 0. Je pense que ce n'est pas vraiment ce que tu cherches
- {0,1} peut être raccourci en ?
- si tu utilises des ' comme délimiteur de chaîne, tu peux utiliser des " dedans sans les escaper (et vice-versa)

Sinon je ne comprends pas bien ton problème. Tu dis que tu ne connais pas l'URL à l'avance. Pourquoi esssaies-tu de la matcher, alors?

Ca aiderait probablement si tu nous disais d'où sort le contenu que tu veux modifier (c'est toi qui le génères, tu le récupères ailleurs), dans quelle mesure tu es sûr du format, et ce que tu veux remplacer exactement...

Jacques.
 

pssinjaune

WRInaute discret
Bonjour jacques et merci de ta réponse,

J'en ai mangé quelques années des regex mais j'ai jamais vraiment reussi a comprendre, du coup à chaque fois que je m'y met ca releve plus de la bidouille tirés de divers exemples trouvés sur le net que de la maitrise parfaite... et crois moi pourtant j'ai passé bcp de temps a chercher une solution.

Mon contenu viens des utilisateurs qui peuvent integrer des images a leurs articles,
Le probleme vient du fait que si l'image est trop grande, celà perturbe l'affichage sur mon site.
Biensur dans mon scipt definitif, ce que je cherche a matcher (http://www.test.com/lol.jpg) n'est pas en dure dans le script mais est contenu dans une variable, j'ai voulu simplifier la lecture et la comprehension du post

Grace a toi, je viens de tester ceci et ca fonctionne:
content = preg_replace('@<img(.*?)(src=\"http://www.test.com/lol.jpg\")(.*?)>@', ' IMAGE DE REMPLACEMENT ', $contenu);

Un grand merci a toi pour m'avoir enlever cette épine du pied,
C'etait pourtant pas compliqué.... il fallait juste le savoir ! ;)

merci encore
 

forty

WRInaute passionné
la fonction preg_quote permet d'échapper les caractères spéciaux dans une chaine variable.
 

Discussions similaires

Haut