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 :

Échappement d'antislash [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 5
    Par défaut Échappement d'antislash
    Bonjour a tous

    Voila ben j'ai un problème suremnt classique...

    Déjà, le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php
    public static function parseCssFile( $content )
    {
        return preg_replace( '#<\$([_\A-Z0-9]+)>#e', 'self::searchPhpVars( $1, \'css\' )', $content ) ;
    }
    ?>
    Cette regex ne trouve pas certaines chaines : celles qui contiennent un antislash '\'.

    Voila si quelqu'un a une idée...

    Merci beaucoup

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 661
    Billets dans le blog
    1
    Par défaut
    http://www.developpez.net/forums/d82...eres-speciaux/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $content="\\\\\\\\\\";
     
    echo preg_replace( '#[_\\\A-Z0-9]#', '*' , $content ) ;
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 5
    Par défaut
    Merci,
    mais ça ne résout pas mon problème, ou alors j'ai peut-être pas compris

    En fait, ma regex marche lorsque la chaine a remplacer ne contient pas d'antislash, mais pas si elle en contient.
    Par exemple,
    <$CONSTANTE> est bien remplacé par la valeur de CONSTANTE
    mais
    <$NAMESPACE\CONSTANTE> n'est pas remplacé par la valeur de NAMESPACE\CONSTANTE

    J'ai essayé d'échapper les <, > et \, et aussi de les échapper 2 fois...

    Après y'a peut etre un truc que je capte pas...

    en tout cas merci si quelqu'un trouve


    EDIT :
    après quelques tests de ton code d'exemple, y'a un truc que je pige pas :
    il faut que les \ soient échapés dans la chaine à parser ?
    parce que quand je met $content = "\", ça me met une erreur de syntaxe, alors que si je met $content = "\\" ça me met bien "**".

    Je suis complètement hs là ou pas ???

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 661
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $content="<\$NAMESPACE\CONSTANTE>";
    echo preg_replace( '#\<\$(([A-Z0-9]+\\\?)+)>#', '$1',$content ) ;
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 5
    Par défaut
    Merci j'ai trouvé
    y'avait juste une erreur que j'avais pas vue

    Merci de m'avoir mis sur la voie

    EDIT :
    Bon en fait le prroblème venait que j'avais pas échapé la chaine $1 dans le code à évaluer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php 'self::searchPhpVars( \'$1\' )' ?>
    Là ça marche sans problème

    En tout cas merci ^^

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

Discussions similaires

  1. Mémoire et antislash
    Par CCin dans le forum C
    Réponses: 12
    Dernier message: 08/10/2005, 13h03
  2. Fonction d'échappement
    Par bletz dans le forum C++
    Réponses: 2
    Dernier message: 30/09/2005, 09h12
  3. caractéres d'échappements
    Par kleenex dans le forum Access
    Réponses: 3
    Dernier message: 27/09/2005, 13h46
  4. Réponses: 10
    Dernier message: 03/09/2004, 18h26
  5. [langage] Doubler les antislashs
    Par tshupaka dans le forum Langage
    Réponses: 3
    Dernier message: 24/07/2004, 16h09

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