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 :

BUG : preg_replace et match [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Points : 624
    Points
    624
    Par défaut BUG : preg_replace et match
    (re)Bonjour,

    Je pense avoir trouvé un bug sur les fonction preg_replace et preg_match...

    historique de la découverte : http://www.developpez.net/forums/sho...d.php?t=179554

    En effet, il semblerai que l'on ne puisse pas utiliser les paramètres du style '\\1' dès lors qu'il y a un signe $ dans les paramètres de ces fonctions...

    En consultant l'aide de ces fonctions, j'ai vu que l'on pouvait appeler de manière obsolète les valeurs de la façon suivante : $1 si on veut recupérer la 1er parenthese dont l'expression correspond exactement au masque... et visiblement, cela doit poser un problème à l'interpréteur dès le moment où on utilise les valeurs récupérées (en utilisant indifférement $ ou \\) dans une méthode ou un index de tableau...

    bon, comme je suis sur que j'ai pas été très clair, les exemples :

    passons aux morceau de code ci dessous la chaine 'transforme moi [CC:1] s'il te plait !'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $text = preg_replace("#(\[CC:)([0-9]*?)(\])#is", transforme('\\2'), $text);
    aucun problème...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $tab = array('a','b','c','d');
    $text = preg_replace("#(\[CC:)([0-3]*?)(\])#is", $tab['\\2'], $text);
    ça, ça ne marche pas...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $text = preg_replace("#(\[CC:)([0-9]*?)(\])#is", $this->transforme('\\2'), $text);
    ne marche pas non plus...

    J'ai beau cherché... je ne vois que le $ placé en début de 2ème paramètre qui puisse être responsable du non résultat... hypothèse d'autant plus crédible qu'il existe (pour la compatibilité descendante) une méthode de récupération des valeurs par $...

    Alors ma question est : est-ce que je me fourvois complétement, et que je passe a coté de certaines subtilité du preg ? ou bien y'a t-il vraiment un bug a ce niveau là, et auquel cas, est-il possible de le contourner ?
    Si vous avez un message d'erreur, n'oubliez pas de le lire, la réponse à votre problème est surement dedans !

  2. #2
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Points : 624
    Points
    624
    Par défaut
    ok, la réponse ici :
    http://www.developpez.net/forums/sho...d.php?t=179554

    Visiblement, d'autre ont déjà eu ce problème mouhahaha
    Si vous avez un message d'erreur, n'oubliez pas de le lire, la réponse à votre problème est surement dedans !

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

Discussions similaires

  1. [RegEx] preg_replace bug !
    Par xxkirastarothxx dans le forum Langage
    Réponses: 1
    Dernier message: 26/01/2010, 15h59
  2. Prise en charge accents avec Match/against [BUG]
    Par numa1985 dans le forum Requêtes
    Réponses: 0
    Dernier message: 26/02/2008, 09h15

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