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 :

Recherche d'une chaine de caractères avec incrémentation et remplacement [RegEx]


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2008
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Recherche d'une chaine de caractères avec incrémentation et remplacement
    Bonjour amis regexiens,
    voici le but de me regex:

    je recherche: '/imageXXX.gif" alt'

    XXX etant 3 chiffres que je souhaite decrementer de 1,
    pour arriver quelque chose comme cela:
    '/imageX-1.png" alt'

    voici ou j'en suis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php 
    $recherche_ff='#image(.*)\.gif" alt';  // je pense que c'est bon? :?
    $fix_ff='image'; // la je ne sais plus :(
    preg_match_all($recherche_ff, $fix_ff, $matches);
    ?>
    s'il quelqu'un pouvais m'apporter sont savoir

  2. #2
    Membre émérite
    Avatar de Nesmontou
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Septembre 2004
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 612
    Points : 2 969
    Points
    2 969
    Par défaut
    Salut, il me semble qu'il faille utiliser preg_replace_callback
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    $pattern = '#(image)(\d{1,3})(\.gif" alt)#';
    $subject = '<img src="images/image3.gif" alt="Texte" />';
    $callback = create_function(
    	'$matches',
    	'return $matches[1] . ((int)$matches[2] - 1) . $matches[3];'
    );
     
    echo $subject . ' -> ' . preg_replace_callback($pattern, $callback, $subject);
    // Affiche : <img src="images/image3.gif" alt="Texte" /> -> <img src="images/image2.gif" alt="Texte" />
    ?>
    Bon développement
    Si vous ne pouvez expliquer un concept à un enfant de six ans, c'est que vous ne le comprenez pas complètement. Albert EINSTEIN

    F.A.Q. : Java, PHP, (X)HTML / CSS

    N'oubliez pas de cliquer sur le bouton Résolu en bas de page quand vous avez obtenu une solution à votre problème

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2008
    Messages : 8
    Points : 6
    Points
    6
    Par défaut encore un pouce :)
    Salut et merci pour cette vitesse de reponse, mais il me reste une petit détail, dis moi si je me trompe:

    L'"extension" doit se transformer en .png donc dis moi si je me trompe a la place

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    $pattern = '#(image)(\d{1,3})(\.gif" alt)#';
    $subject = '<img src="images/image3.gif" alt="Texte" />';
     
    $matches[3]='.png" alt'; // pour réaffecter en dur sans recherche regex je pense que c'est le mieux?
     
    $callback = create_function(
    	'$matches',
                 'return $matches[1] . ((int)$matches[2] - 1) . $matches[3];'
    );
     
    echo $subject . ' -> ' . preg_replace_callback($pattern, $callback, $subject);
    // Affiche : <img src="images/image3.gif" alt="Texte" /> -> <img src="images/image2.gif" alt="Texte" />
    ?>

  4. #4
    Membre émérite
    Avatar de Nesmontou
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Septembre 2004
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 612
    Points : 2 969
    Points
    2 969
    Par défaut
    Arrrg, excuse-moi je n'avais pas fais gaffe à l'extension

    Tu peux essayer ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    $pattern = '#(image)(\d{1,3})(\.gif)(" alt)#';
    $subject = '<img src="images/image3.gif" alt="Texte" />';
    $callback = create_function(
    	'$matches',
    	'return $matches[1] . ((int)$matches[2] - 1) . \'.png\' . $matches[4];'
    );
     
    echo $subject . ' -> ' . preg_replace_callback($pattern, $callback, $subject);
    // Affiche : <img src="images/image3.gif" alt="Texte" /> -> <img src="images/image2.png" alt="Texte" />
    ?>
    Bonne continuation
    Si vous ne pouvez expliquer un concept à un enfant de six ans, c'est que vous ne le comprenez pas complètement. Albert EINSTEIN

    F.A.Q. : Java, PHP, (X)HTML / CSS

    N'oubliez pas de cliquer sur le bouton Résolu en bas de page quand vous avez obtenu une solution à votre problème

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2008
    Messages : 8
    Points : 6
    Points
    6
    Par défaut encore une petite chose...
    si je comprend bien, ((int)$matches[2] - 1)
    transforme 003 en 2 , et la problème il s'agit sur un flux de réorienter vers l'image précédente: 002 donc sur 3 digit obligatoirement,

    si tu as une idée, moi je suis sur ton explication depuis ce matin pour l'intégration et j'ai enfin vu cette erreur.

    Merci encore pour ton aide

  6. #6
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Points : 2 273
    Points
    2 273
    Par défaut
    Salut,
    tu peux compléter ta chaîne avec str_pad() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    str_pad(((int)$matches[2] - 1), 3, "0", STR_PAD_LEFT)
    Vive les roues en pierre

  7. #7
    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 777
    Points
    17 777
    Par défaut
    Faites appel à sprintf par exemple pour formater votre nombre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $pattern = '#(?<=image)(\d{1,3})\.gif(?=" alt)#';
    $subject = '<img src="images/image3.gif" alt="Texte" />';
    $callback = create_function(
        '$matches',
        'return sprintf("%03d", intval($matches[1]) - 1) . ".png";'
    );

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2008
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Resolut ;)
    Merci

    Nesmontou
    Djakisback
    julp

    pour cette aide, cordialement, PROSER

    Ps: voici le code final:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
     
    //on a en entrée, image123.gif" alt
    	$pattern = '#(image)(\d{1,3})(\.gif)(" alt)#';
    	$callback = create_function(
    		'$matches',
    		'return $matches[1] . (str_pad(((int)$matches[2] - 1), 3, "0", STR_PAD_LEFT)) . \'.png\' . $matches[4];'
    	);
    	$f= preg_replace_callback($pattern, $callback, $f);
     
    //on a en sortie image122.png" alt , explication: n+° image-1
    //et changement d'extension 
    ?>

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

Discussions similaires

  1. rechercher dans une chaine de caractère, un caractère avec un tant que
    Par levasseur62 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 16/01/2011, 17h02
  2. [VB.NET] Recherche dans une chaine de caractères
    Par Pleymo dans le forum Windows Forms
    Réponses: 12
    Dernier message: 09/04/2005, 10h25
  3. [String]Recherche d'une chaine de caractères dans une autre
    Par Crazyblinkgirl dans le forum Langage
    Réponses: 3
    Dernier message: 29/07/2004, 11h51
  4. recherche d'une chaine de caractère dans une données text
    Par jdeheul dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 17/06/2004, 16h35
  5. Réponses: 2
    Dernier message: 06/12/2002, 07h50

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