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

Framework .NET Discussion :

Condenser une syntaxe RegEx


Sujet :

Framework .NET

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 61
    Points : 48
    Points
    48
    Par défaut Condenser une syntaxe RegEx
    Bonjour,
    Je cherche à vérifier une chaîne pouvant être constituée de 1, 2 ou 3 champs séparés par le caractère '.'.
    • Le premier champ obligatoire contient "CF", "ET", ou "IT".
    • Le deuxième champ, optionnel, contient un groupe d'au moins 3 caractères pouvant être des lettres ou des chiffres.
    • Le troisième champ, obligatoire que si le deuxième champ est présent et correcte, peut contenir un nombre quelconque de lettres.


    L'expression suivante semble correspondre à mon besoin mais je la trouve un peu lourde...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @"(^(CF|ET|IT)$)|(^(CF|ET|IT)\.[A-Z0-9]{3,}$)|(^(CF|ET|IT)\.[A-Z0-9]{3,}\.[A-Z]*$)"
    Merci à toute personne ayant une idée pour condenser un peu cela...

  2. #2
    Membre confirmé

    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2006
    Messages : 317
    Points : 597
    Points
    597
    Par défaut
    Tu peux utiliser le ? equivalent au symbole de répétition {0,1} pour indiquer les 2 derniers blocs optionnels

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ^(CF|ET|IT)((\.[A-Z0-9]{3,})(\.[A-Z]*)?)?$
    Décomposer, ça donnerait ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ^(CF|ET|IT) (Le premier bloc est toujours présent)
    ((\.[A-Z0-9]{3,})(\.[A-Z]*)?)? (Le deuxième ligne est optionnel, si elle y est le 3 ème bloc est recherché)
    J'ai utilisé ce jeu de donnée pour valider l'expression (ce n'est pas une preuve en soit d'équivalence):

    CF.213.arto (Ne passe pas)
    CF.213.ARTO (Passe)
    CF.ARTO (Passe)
    CF 213 (Ne passe pas)
    CF.213 (Passe)
    ET (Passe)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 61
    Points : 48
    Points
    48
    Par défaut
    Merci Phelim
    Exactement ce que je cherchais...

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

Discussions similaires

  1. [INNER JOIN] Pourquoi ai-je une syntax error ?
    Par ricil78 dans le forum Accès aux données
    Réponses: 9
    Dernier message: 04/08/2006, 11h18
  2. Eviter une syntaxe trompeuse.
    Par Mersenne dans le forum C++
    Réponses: 24
    Dernier message: 09/07/2006, 14h27
  3. Mise en forme dans un RTF via une syntaxe personnelle
    Par sqwalichou dans le forum Autres langages
    Réponses: 2
    Dernier message: 24/02/2006, 22h19
  4. [langage] comprendre une syntaxe particulière
    Par mat21 dans le forum Langage
    Réponses: 4
    Dernier message: 08/12/2004, 18h12
  5. [RICHEDIT] -> Coloriser une syntaxe ?
    Par MaTHieU_ dans le forum C++Builder
    Réponses: 6
    Dernier message: 18/01/2004, 12h57

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