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

C Discussion :

Expression régulière, résolution d'un soucis gênant.


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 86
    Par défaut Expression régulière, résolution d'un soucis gênant.
    Bonjour,

    Cela ne fait pas longtemps que je me sert de ce forum, en fait depuis que j'apprends le C.

    Je reviens vers vous car entre temps j'ai rencontrer des petits soucis d'expression régulière.

    Je m'explique, à mon programme je passe des arguments, que je récupère.

    J'ai une fonction " regtest ", à laquelle je donne mon expression régulière et la chaine à tester.

    Dans le cas ou j'ai la chaine " 123 " à tester (sans les espaces), ça fonctionne quand j'utilise comme expression [0-9].

    Par contre, je ne comprends pas, quand j'utilise [:digit:] ça ne fonctionne pas, pourquoi ?

    En outre, quand j'ai comme chaine à tester " test² " (avec le 2 exposant), et que j'ai comme expression régulière : " [-_[:alnum:]] ", il laisse passer la chose.

    la chaine récupéré passe par un algo de chiffrage qui n'est pas de mon cru, et une fois déchiffrer cet algo me met " zz " à la place du " ² ".

    Je ne comprends vraiment pas ou est l'erreur, si quelqu'un pourrait éclairer ma lanterne sur le sujet ça m'arrangerais car je perds la tête.

    Pour info pour m'aider j'ai utiliser ce liens dispo sur le site :

    http://nicolasj.developpez.com/articles/regex/

    Voila, en espérant que comme à l'habitude quelqu'un puisse m'aider ...

  2. #2
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    L'opérateur de regex [ ] est un opérateur signifiant "l'un de ceux-ci".
    il accepte un ensemble de valeurs, qui sont spécifiables de plusieurs moyens.
    • explicitement: [akl] accepte un a, un k ou un l
    • par série: [c-g] accepte tout caractère compris entre c et g (inclus) (attention aux locales…
    • par classes [:digit:] est une classe. du coup, [[:digit:]] est un selecteur (chiffres base 10), de meme que [[:digit:]A-F] (chiffres bases 16 majuscules)


    Ton erreur est de confondre les corchets de la classe avec ceux de l'opérateur

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 86
    Par défaut Merci
    Ah d'accord, je ne confondais pas, je ne savais pas que [:digit:] était une classe, donc dans la logique ça ne peut pas marché.

    En gros, [[:digit:]] c'est la classe équivalente à [0-9], la c'est plus claire.

    Sinon du reste, " ² " qui devient " zz ", une idée ?

  4. #4
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Ça, je n'en sais rien.

    Fais particulièrement attention à la différence entre séquences et classes. [:alpha:] n'est pas strictement a-zA-Z, surtout s'il y a des caractères accentués dans la locale actuellement utilisée.
    Il faut garder cette différence dans un coin de la tête quand tu utilises les regex.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 86
    Par défaut
    l'expression régulière qui teste cette argument entrée est :
    [-_[:alnum:]]

    donc, alum n'est pas strictement non plus a-z et A-Z.

    En outre, est-ce correcte d'écrire [a-zA-Z] ? ou dois-je écrire plutot :

    [[a-z][A-Z]] ?

    Je pense que tu aura compris que c'est la première fois que j'ai affaire aux expressions régulière, je viens du monde VB ou de telles choses peuvent être faite dans les controles de façon dynamique très facilement ... comme c'est un programme console que je développe l'optique n'est pas la même.

  6. #6
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    [a-zA-Z] est une regex, [[a-z][A-Z]] n'en est pas une. (dans aucune syntaxe acceptée par C++11, en tout cas)

    [:alnum:] est logiquement "tout caractère alphabétique ou numéral"
    tu y trouve au minimum les minuscules et majuscules de base, mais tu peux aussi y trouver les accents âàäêéèëöôùüïî, ÂÄÀÊÉÈËÖÔÙÜÏÎ, et aussi le ç

Discussions similaires

  1. Soucis expressions régulières
    Par RTK45 dans le forum Applications et environnements graphiques
    Réponses: 4
    Dernier message: 16/02/2012, 22h19
  2. Réponses: 11
    Dernier message: 07/04/2010, 17h51
  3. [VB6-Expressions régulières]Petit souci
    Par loverdose dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 27/09/2006, 15h17
  4. Expressions réguliéres
    Par Tooms dans le forum Langage
    Réponses: 4
    Dernier message: 06/12/2002, 18h42
  5. Réponses: 5
    Dernier message: 11/06/2002, 15h21

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