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 Perl Discussion :

Expressions régulière : Quand la virgule s'en mêle


Sujet :

Langage Perl

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Expressions régulière : Quand la virgule s'en mêle
    Bonjour,

    Je suis nouveau dans le monde de Perl.
    Actuellement, je développe une commande et elle doit proposer l'entrée de différents types d'arguments.

    Parmi ceux-ci, il y a les listes représentés simplement {1,-2.3,-6}.
    Mon soucis est que mon expression régulière repérant les virgules ne marche pas :

    $arg =~ m/\{([+-]?\d+(.\d+)?\,)*[+-]?\d+(.\d+)?\}/

    D'aprés moi, elle est censée pour voir repérer l'exemple donné ci-dessus mais elle ne matche que sur les listes d'un éléments : {12}, {-6} ou autre.

    J'ai tenté de comprendre mon erreur résultat :

    $arg =~ m/\{[+-]?\d+(.\d+)?a\} matche {99a}

    MAIS

    $arg =~ m/\{[+-]?\d+(.\d+)?,\} ne matche pas {99,}

    même chose pour : $arg =~ m/\{[+-]?\d+(.\d+)?\,\}

    Quelqu'un aurait-il la simpathie de m'expliquer mon erreur ou mon incompréhension ?

    Cordialement,

    Mokuhiken.

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Je viens d'essayer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $a = "{99,}";
    print "true\n" if $a =~ m/\{[+-]?\d+(.\d+)?,}/;
    Ca marche sans problème.

    Je vais donc avoir du mal à t'aider. Tu peux peut-être essayer d'échapper la virgule en pla précédant par un backslash ("\").

  3. #3
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    L'expression matche effectivement correctement.
    Cela dit, si tu souhaites récupérer les valeurs de liste, il est peut-être préférable de procéder en deux étapes simples :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (my ($liste) = $arg =~ m/\{([^\}]+)\}/) {
      my @liste = split /\s*,\s*/, $liste;
    }

Discussions similaires

  1. [RegEx] Expression régulière (chiffres et virgule)
    Par Atori dans le forum Langage
    Réponses: 10
    Dernier message: 03/08/2012, 16h56
  2. [Expression Régulière] Suppression virgule
    Par Thewil dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 30/07/2009, 16h36
  3. Expression régulière chiffres et virgules
    Par johweb dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 05/06/2008, 21h51
  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