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 :

Remplacer partie d'une chaîne par le résultat d'une fonction [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 20
    Points : 19
    Points
    19
    Par défaut Remplacer partie d'une chaîne par le résultat d'une fonction
    Bonjour,

    je veux remplacer toutes les occurences d'un certain type de chaînes par le résultat d'une fonction de cette chaîne. Un exemple vaut sûrement mieux:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    <?php
     
    $text = "[arg=toto]";
    $text = preg_replace("/\[arg=(\#[0-9A-F]{6}|[a-z]+)\]/si", func('$1'), $text);
     
    echo($text);
    exit;
     
    function func($arg)
    {
    //	return($arg[0]);
    	return($arg);
    }
     
    ?>
    Dans cet exemple, quand func renvoie $arg, echo($text) affiche bien toto, mais quand je veux récupérer le premier caractère de $arg dans func, ça affiche '$'.

    Il semble donc que ce soit vraiment $1 qui est envoyé à func, et que c'est echo qui l'interprète plus tard comme toto, alors que je voudrais que func connaisse déjà toto....

    Avez-vous une idée ?

    Merci

    Jérôme

  2. #2
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Bonjour,

    Dants ton exemple, $1 vaut "toto".
    C'est donc une chaîne et pas un tableau.
    Ne pourrais-tu pas plutôt utiliser substr dans ta fonction ?
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 20
    Points : 19
    Points
    19
    Par défaut
    Non, ça fait pareil (ça affiche aussi $). Je pense qu'il y a un problème en amont, dans func('$1'), mais rien de ce que j'ai essayé ne marche.

    Jérôme

  4. #4
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Ouah, chuis bête, j'avais pas vu les simples quotes !
    Remplaces par des guillemets pour que la variable soit interpolée.
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  5. #5
    Membre éclairé
    Avatar de genova
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 487
    Points : 790
    Points
    790
    Par défaut
    Tu as deux choix :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $text = preg_replace("/\[arg=(\#[0-9A-F]{6}|[a-z]+)\]/sie", 'func(\'$1\')', $text);
    ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function callback_func($m)
    {
       return (func($m[1]));
    }
    $text = preg_replace_callback("/\[arg=(\#[0-9A-F]{6}|[a-z]+)\]/si", 'callback_func', $text);
    je te conseil plutôt l'utilisation de preg_replace_callback() pour des raisons de sécurité.
    Testez le forum Fire Soft Board, un forum libre, gratuit et français.

    Système de template de phpBB - Lisez la FAQ PHP avant toute question si vous débuttez en PHP.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 20
    Points : 19
    Points
    19
    Par défaut
    Merci ! Ca marche super avec preg_replace_callback.

    Jérôme

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 06/10/2011, 17h15
  2. [RegEx] Isoler une chaïne par le biais d'une expression régulière
    Par hpl76 dans le forum Langage
    Réponses: 13
    Dernier message: 09/02/2011, 16h48
  3. Réponses: 2
    Dernier message: 13/06/2007, 15h40
  4. Réponses: 2
    Dernier message: 19/04/2007, 15h26
  5. Réponses: 2
    Dernier message: 12/04/2007, 17h12

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