Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/01/2007, 11h55   #1
Invité de passage
 
Inscription : janvier 2007
Messages : 9
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : janvier 2007
Messages : 9
Points : 2
Points : 2
Par défaut Remplacement avec Expressions régulieres

Bonjour , je reviens vers vous encore pour un probleme d'extraction de chaines (de remplacement plus exactement)

depuis ce matin je cherche a utiliser correctement les expressions regulieres et j'avoue que j'ai un peu de mal ....

donc voilà mon probleme est le suivant : je veux afficher des miniatures sur mon site mobile. lorsque j'upload une image sur mon site, je créé une miniature de cette image automatiquement.

admettons que l'image s'appelle image1.gif, la miniature s'appelera miniature_image1.gif

ensuite dans mon site mobile je n'ai plus qu'a faire une recherche de image1.gif et de la remplacer par miniature_image1.gif ...

voilà ... je ne parviens pas a faire ce remplacement. Les image se trouvent dans les repertoires /upload et /upload/*

j'ai essayé un truc du genre :
$Texte = ereg_replace("([^\s'\"]*\.gif)","miniature_\\1",$row[7]);

mais ca ne fonctionne pas du tout

quelqu'un saurait faire ca ?
je vous remercie d'avance ;-)
TmR
TmR14 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2007, 13h34   #2
Invité de passage
 
Inscription : janvier 2007
Messages : 9
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : janvier 2007
Messages : 9
Points : 2
Points : 2
bon j'ai avancé un peu.
en relisant tous les posts sur les remplacements j'arrive a ce résultat :

$Texte = ereg_replace("/upload\/(.*)\/(.*)(.jpg|gif|png)", "/upload/"."\\1"."/"."miniature_"."\\2"."\\3",$row[7]);

... mais ca ne fonctionne toujours pas

exemple de chaines a transformer :
Exemple 1 :
"bla bla bla <img src='http://www.monsite.com/upload/image1.gif'> bla bla" qui devrait donner :
"bla bla bla <img src='http://www.monsite.com/upload/miniature_image1.gif'> bla bla" qui

exemple 2 :
"bla bla bla <img src='http://www.monsite.com/upload/news/image2.gif'> bla bla" qui devrait donner :
"bla bla bla <img src='http://www.monsite.com/upload/news/miniature_image2.gif'> bla bla" qui
TmR14 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2007, 13h43   #3
Invité de passage
 
Inscription : janvier 2007
Messages : 9
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : janvier 2007
Messages : 9
Points : 2
Points : 2
alors (je continue a avancer) .. mais la ca va etre plus dur je pense

j'essaie ca :
$Texte = preg_replace('#\/upload(.*)\/(.*)(.jpg|gif|png)#Usi', '/upload$1/$2miniature_$3', $row[7] ) ;

mais au lieu d'avoir "http://www.monsite.com/upload/miniature_image1.gif" j'ai "http://www.monsite.com/upload/image1miniature_.gif" ....
TmR14 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2007, 13h55   #4
Invité de passage
 
Inscription : janvier 2007
Messages : 9
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : janvier 2007
Messages : 9
Points : 2
Points : 2
bon voilà j'ai simplifié mon probleme

j'utilise cette ligne :
$Texte = preg_replace('#\/upload(.*)\/(.*)(.jpg|gif|png)#Usi', '/upload/$1miniature_$2$3', $row[7] ) ;

pour le remplacement des miniatures dans le repertoire /upload ca fonctionne.
par contre pour le remplacement dans les sous repertoires d'upload (upload/news) ca ne fonctionne pas ... ca donne : http://www.monsite.com/upload/miniature_news/image1.gif !

comment faire pour ne faire ressortir que le nom du fichier dans le dernier parametre du preg_replace ?
TmR14 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2007, 19h09   #5
Invité de passage
 
Inscription : janvier 2007
Messages : 9
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : janvier 2007
Messages : 9
Points : 2
Points : 2
je me permets un petit up car pour le moment je n'ai toujours pas trouvé de solution.

en attendant : je fais
Code :
1
2
3
4
5
6
if ( preg_match("#\/upload\/news\/(.*\.(jpg|gif|png))#Usi", $row[7] ) == true )
	$row[7] = preg_replace("#\/upload\/news\/(.*\.(jpg|gif|png))#Usi", '/upload/news/miniature_$1', $row[7] ) ;
else if ( preg_match("#\/upload\/Tests\/(.*\.(jpg|gif|png))#Usi", $row[7] ) == true )
	$row[7] = preg_replace("#\/upload\/Tests\/(.*\.(jpg|gif|png))#Usi", '/upload/Tests/miniature_$1', $row[7] ) ;
else if ( preg_match("#\/upload\/(.*\.(jpg|gif|png))#Usi", $row[7] ) == true )
	$row[7] = preg_replace("#\/upload\/(.*\.(jpg|gif|png))#Usi", '/upload/miniature_$1', $row[7] ) ;
en gros je teste chaque sous repertoire de /upload/ (le jour ou on ajoute ca ne fonctionne plus ... )
TmR14 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2007, 19h31   #6
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
ça me paraît bien compliqué votre histoire d'autant plus que vous n'avez pas besoin d'échapper le caractère slash vu qu'il n'est ni utilisé comme délimiteur de l'expression régulière et n'est ni un méta-caractère.

J'ai effectué un petit test rapide avec :
Code :
1
2
3
4
5
6
7
8
9
10
$rows = array(
    '/upload/news/img1.gif',
    'http://www.developpez.com/upload/img1.gif',
    'ftp://www.developpez.com/upload/news/cat1/img1.png',
    '/upload/news/img1-jpg',
);
foreach ($rows as $row) {
    $row = preg_replace("#/upload/(.*)([^/]+\.(?:jpg|gif|png))$#Usi", '/upload/$1miniature_$2', $row);
    echo $row . '<br/>';
}

Julp.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2007, 21h49   #7
Invité de passage
 
Inscription : janvier 2007
Messages : 9
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : janvier 2007
Messages : 9
Points : 2
Points : 2
tout d'abord merci pour votre réponse, j'utilise les regexp pour la premiere fois aujourd'hui donc ne soyez pas étonné des erreurs qu'il peut y avoir dedans ;-)

donc je viens de tester le code : ca fonctionne effectivement dans les cas que vous avez entré dans le tableau mais pas sur mon site ...

j'ai cherché un peu et j'ai constaté que s'il y a avait un espace ou un caractere juste derriere le .jpg , ca ne fonctionnait plus :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
	$rows = array(
	    '/upload/news/img1.gif',
	    'http://www.developpez.com/upload/img1.gif',
	    'ftp://www.developpez.com/upload/news/cat1/img1.png',
	    '/upload/news/img1.jpg',
	    '=>/upload/news/img1.gif\'',
	    '=>/upload/news/img1.gif"',
	    '=>../upload/news/img1.gif ',
 
	);
	foreach ($rows as $roww) {
	    $roww = preg_replace("#/upload/(.*)([^/]+\.(?:jpg|gif|png))$#Usi", '/upload/$1miniature_$2', $roww);
	    echo $roww . '<br/>';
	}
regardez les 3 dernieres lignes , elles ne sont pas remplacées .... vous avez une idée ??

je vous remercie
TmR14 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2007, 22h13   #8
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Oui effectivement j'ai oublié de prendre en compte le contexte dans lequel ce code était utilisé : il suffit normallement de supprimer le signe dollar ($) à la fin de l'expression régulière. La ligne modifiée par rapport à votre code ci-dessus est la suivante :
Code :
$roww = preg_replace("#/upload/(.*)([^/]+\.(?:jpg|gif|png))#Usi", '/upload/$1miniature_$2', $roww);
Edit : il est possible de rendre cette expression régulière un peu plus portable au niveau des chemins des fichiers (et non des URL) en utilisant la constante PHP : DIRECTORY_SEPARATOR.


Julp.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2007, 22h28   #9
Invité de passage
 
Inscription : janvier 2007
Messages : 9
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : janvier 2007
Messages : 9
Points : 2
Points : 2
ca a l'air simple avec vous les expressions régulieres

ca fonctionne

Merci beaucoup pour votre aide

bonne soirée
TmR
TmR14 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h40.


 
 
 
 
Partenaires

Hébergement Web