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 avec "(toto]" !? [RegEx]


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 9
    Points : 6
    Points
    6
    Par défaut Bug avec "(toto]" !?
    Bonjour,

    J'ai une chaine de départ : "(toto]"
    Je recherche dans cette chaine tous les caractères autres que lettres & chiffres, et je trouve : "(]"
    Ensuite, j'échappe les caractères spéciaux pour les supprimer (c'est du C#) :

    Regex.Replace("(toto]", "[\\(]]", "");

    Et là, ça ne marche pas !
    Par contre, avec ces chaîne de départ, ça fonctionne parfaitement :
    "(]"
    "(]toto"
    "toto(]"

    Y a-t-il une subtilité que je ne saisis pas ?

    Merci de votre aide !

  2. #2
    Membre actif Avatar de k1rby
    Profil pro
    Développeur Web
    Inscrit en
    Novembre 2008
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2008
    Messages : 181
    Points : 219
    Points
    219
    Par défaut
    Je n'ai que de vagues souvenirs de C#, mais en quoi ( ou ] dans une chaine de caractères sont des caractères spéciaux ?
    est votre ami. Utilisez le avant de venir poser une question traitée 50 fois.
    Exprimez vous dans un français correct, vous serrez mieux compris.

  3. #3
    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 : 50
    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
    Citation Envoyé par TheOnlyMaX2 Voir le message
    Y a-t-il une subtilité que je ne saisis pas ?
    Oui.

    Les slashes sont mal balancés dans ta classe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    $str = '(toto]';
    $reg = '#([(\\]])#';
    print preg_replace($reg, '\\\$1', $str);
    RQ : En Perl, j'aurais utiliser l'opérateur de transposition, mais je crois qu'il n'est pas disponible en php.
    • 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

  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 : 50
    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
    J'avais pas tilté sur le C#.

    A adapter au niveau du nombre de slashes, bien emmerdants dans les regex php... Il me semble que tu en auras besoin de moins en C# :

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    String reg = "[(\]]";
    • 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 actif Avatar de k1rby
    Profil pro
    Développeur Web
    Inscrit en
    Novembre 2008
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2008
    Messages : 181
    Points : 219
    Points
    219
    Par défaut
    Citation Envoyé par s.n.a.f.u Voir le message
    RQ : En Perl, j'aurais utiliser l'opérateur de transposition, mais je crois qu'il n'est pas disponible en php.
    Hummm, à tester Après tout les fonctions preg utilisent des expressions PCRE signifiant Perl Compatible Regular Expressions
    Après c'est peut être pas entièrement compatible non plus, à voir :s
    est votre ami. Utilisez le avant de venir poser une question traitée 50 fois.
    Exprimez vous dans un français correct, vous serrez mieux compris.

  6. #6
    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 : 50
    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
    Citation Envoyé par k1rby Voir le message
    Hummm, à tester Après tout les fonctions preg utilisent des expressions PCRE signifiant Perl Compatible Regular Expressions
    Après c'est peut être pas entièrement compatible non plus, à voir :s
    C'est compatible perl au niveau des motifs.
    Les opérateurs de perl sont un peu les fonctions preg.
    Et il n'existe pas de preg_transpose, mais cela se remplace assez aisément par preg_replace.
    • 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

  7. #7
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Merci de vos réponses rapides,

    Pour résoudre le problème, j'ai rajouté une première étape dans laquelle je supprime les caractères "[" et "]".

  8. #8
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    En fait, en C# il y a une fonction pour échapper tous les caractères réservés :

    Regex.Escape

    Cette fonction traite ces caractères :
    \, *, +, ?, |, {, [, (,), ^, $,., #, et l'espace
    mais le ] n'en fait pas partie !
    En échappant manuellement le "]", on n'a plus de problème.

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

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