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 :

appliquer une fonction à un regex [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 65
    Par défaut appliquer une fonction à un regex
    Bonjour,

    Voilà mon problème: j'aimerai appliquer une fonction à un résultat d'un regex

    Bon voilà mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->tableau_resultat =  preg_replace('#\[date=age\](.*)\[/date\]#Usi', Cl_Date::age("$1"), $this->tableau_resultat);
    et mystérieusement $1 prends comme valeur null!

    avez vous une idée afin que je comprenne mon erreur?

    Merci d'avance

    laurent

  2. #2
    Membre éprouvé

    Inscrit en
    Janvier 2006
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 969
    Par défaut
    Je pense qu'il faut utiliser la fonction preg_replace_callback() http://fr3.php.net/manual/fr/functio...e-callback.php

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 65
    Par défaut
    oui j'ai commencé à chercher mais sans succès...


    ce code s'applique sur cette balise [date]%A[/date] pour plus d'infos elle s'applique à toute cette liste d'attributs. (http://fr.php.net/manual/fr/function.strftime.php)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->tableau_resultat =  preg_replace_callback('/\[date\](.+)\[\/date\]/', strftime , $this->tableau_resultat);

    Mais voilà j'obtiens cette erreur:Warning: strftime() expects parameter 1 to be string, array given in C:\wamp\www\charlon\libs\classes\cl.etat.php on line 130

    Si vous pouvez m'éclairer?

    merci d'avance laurent

  4. #4
    Membre éprouvé

    Inscrit en
    Janvier 2006
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 969
    Par défaut
    A mon avis, il faut réécrire la fonction strftime comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function strftime_bis($matches) {
       return strftime($matches[0]);
    }
    puis
    $this->tableau_resultat =  preg_replace_callback('/\[date\](.+)\[\/date\]/', strftime_bis , $this->tableau_resultat);
    Encore mieux, utiliser une fonction anonyme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $this->tableau_resultat =  preg_replace_callback('/\[date\](.+)\[\/date\]/', create_function(
                // Les guillemets simples sont très importants ici
                // ou bien il faut protéger les caractères $ avec \$
                '$matches',
                'return strftime($matches[0]);'
            ),$this->tableau_resultat);

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 65
    Par défaut
    ah ben c'est déjà plus claire!

    sauf que le résultat maintenant est [date]jeudi[/date], y a t'il moyen d'enlever ces fameuses balises.

    en tout cas merci pour t'es 2 exemples, je comprends maintenant comment marche cette fameuse fonction.

  6. #6
    Membre éprouvé

    Inscrit en
    Janvier 2006
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 969
    Par défaut
    Au temps pour moi, il faut définir ta fonction avec $matches[1];
    Dans un regex, $matches[0] représente l'ensemble de l'expression et $matches[$i] avec $i entre 1 et 99 les expressions capturées.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 03/07/2007, 14h03
  2. Réponses: 3
    Dernier message: 08/06/2007, 13h09
  3. appliquer une fonction à toutes les balises <a>
    Par trotters213 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 30/10/2006, 16h49
  4. [MySQL] Appliquer une fonction sur un champ lors d'une requête
    Par Jérémy197 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 13/08/2006, 13h29
  5. Peut-on appliquer une fonction sur un champs ajouté?
    Par tinwul dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 31/05/2006, 17h02

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