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 :

regexp : capture multiple


Sujet :

Langage Perl

Vue hybride

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

    Informations forums :
    Inscription : Septembre 2011
    Messages : 9
    Par défaut regexp : capture multiple
    bonjour

    je souhaite trouver des chaînes du type "0000:81 B2 B2 33 36 B2 35 39 B8 B8 39 30 B1", donc 0000:81 suivi de 12 blocs de 2 caractères séparés par un espace, le 2e caractère de chaque bloc étant un chiffre. Ce sont ces chiffres qui m'intéressent pour la suite du traitement.

    Naïvement, je code :
    if(/0000: 81(?: .(\d)){12}/) { print "$1$2 $3$4 $5$6 $7$8 $9$10 $11$12\n"; }

    Pas de chance, ça ne me sort que le 12e chiffre. Apparemment, à chaque fois qu'il trouve une des 12 occurences du motif, il écrase $1 avec le nouveau chiffre trouvé.

    Je peux écrire 12 fois mon motif mais c'est contraire à l'élégance la plus élémentaire.

    Merci d'avance pour vos idées...

  2. #2
    Membre éclairé Avatar de PadawanInPerl
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 462
    Par défaut
    ..

  3. #3
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 184
    Par défaut
    Pourquoi n'utilises-tu pas un opérateur de répétition comme *, +, ou les accolades ?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 9
    Par défaut
    Ben c'est ce que je fais dans :

    (/0000: 81(?: .(\d)){12}/)

    Pour moi le {12} fait chercher 12x le motif entre parenthèses qui précède :

    (?: .(\d))

    donc un espace, un caractère, un chiffre.
    Ca ça marche bien. Ce qui ne marche pas, c'est l' "enregistrement" des 12 chiffres par (\d) : au lieu de me les mettre dans $1, $2...$12, il ne met que le dernier dans $1 et rien dans $2...$12.

    En espérant que c'est plus clair comme ça....

  5. #5
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 184
    Par défaut
    Erratum. J'ai parlé beaucoup trop vite...

    Je n'ai pas souvenir que ce soit possible de répéter un matching.
    Par contre, tu peux t'en sortir facilement avec map :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    my $s = "0000:81 B2 B2 33 36 B2 35 39 B8 B8 39 30 B1";
    my @l = map { /^.(\d)$/ } split( ' ', $s );

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 9
    Par défaut
    merci

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

Discussions similaires

  1. [RegEx] Capture multiple : ne renvoie que la dernière valeur
    Par Maelikk dans le forum Langage
    Réponses: 3
    Dernier message: 01/07/2012, 19h41
  2. Captures multiples dans une regexp
    Par Sp4MaFauTe dans le forum Langage
    Réponses: 1
    Dernier message: 28/03/2012, 18h01
  3. Multiple captures par regexp ?
    Par lennelei dans le forum Langage
    Réponses: 10
    Dernier message: 25/03/2009, 23h01
  4. [RegEx] Capture multiple ?
    Par pylaterreur dans le forum Langage
    Réponses: 4
    Dernier message: 02/08/2008, 10h25
  5. [regexp] comment capturer un groupe
    Par PhiLou421 dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 21/06/2007, 01h01

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