IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Remplacement avec Expressions régulieres [RegEx]


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 9
    Points : 5
    Points
    5
    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

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    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

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    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" ....

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    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 ?

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

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

    en attendant : je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ... )

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    ç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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    $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.

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    ca a l'air simple avec vous les expressions régulieres

    ca fonctionne

    Merci beaucoup pour votre aide

    bonne soirée
    TmR

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. chercher remplacer avec expression reguliere
    Par ImagingAllthe dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 09/09/2010, 16h19
  2. [XL-2003] Remplacement avec expressions régulières
    Par Mikediten dans le forum Excel
    Réponses: 4
    Dernier message: 08/09/2009, 17h51
  3. Caractere speciaux avec expression réguliere
    Par facilus68 dans le forum Général Java
    Réponses: 6
    Dernier message: 13/05/2009, 14h45
  4. Switch case avec expression réguliere
    Par neptunia dans le forum Langage
    Réponses: 5
    Dernier message: 14/03/2008, 12h51
  5. Probleme avec expression réguliere
    Par Raideman dans le forum Langage
    Réponses: 3
    Dernier message: 22/06/2006, 13h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo