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 - motif repete


Sujet :

Langage Perl

  1. #1
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut regexp - motif repete
    Bonjour a tous,

    Je me remets au Perl, pourriez-vous m'aider avec ma regexp ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    while(my $l = <DATA>){
    print $l."\n";
    	if ($l =~ m/(NTC_WP[\d\.]+_E\w+)+/g){ 
     
    		my @names = $l =~ m/(NTC_WP[\d\.]+_E\w+)+/g;
     
    		foreach my $n (@names){
     
    			print $n."\n";
    		}
    		print "\n";
    	}
     
    }
    sortie :
    NTC_WP1.1.1_E02 NTC_WP1.1.8_E01_original NTC_WP1.2.4_E02 NTC_WP2.1_E04 NTC_WP2.3_E01 NTC_WP3.1_E03 NTC_WP4.1.1_E01 NTC_WP4.1.3_E03 NTC_WP4.2.2_E19

    NTC_WP1.1.8_E01_original
    NTC_WP1.2.4_E02
    NTC_WP2.1_E04
    NTC_WP2.3_E01
    NTC_WP3.1_E03
    NTC_WP4.1.1_E01
    NTC_WP4.1.3_E03
    NTC_WP4.2.2_E19
    Les espaces sont variables entre les valeurs.
    Pourquoi le premier motif n'est-il pas recupere ?

    Merci pour votre aide


    Jasmine

    PS : desolee, mais mon clavier a perdu ses accents
    -- Jasmine --

  2. #2
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Petite remarque, j'ai simplemet utilise un split et ca fonctionne tres bien, mais j'aimerais comprendre pourquoi la regexp ne fonctionne pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my @names = split /\s+/, $l ;
    Merci.
    -- Jasmine --

  3. #3
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    c'est simplement que tu répètes le matching

    suivant la doc
    The global modifier //g allows the matching operator to match within a string as many times as possible. In scalar context, successive matches against a string will have //g jump from match to match, keeping track of position in the string as it goes along.
    autrement dit, le premier match déplace le pointeur à la 2è position, et donc tu ne récupères pas la première quand tu matches la 2è fois.

    tu peux visualiser cela en doublant le match dans la boucle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if ($l =~ m/(NTC_WP[\d\.]+_E\w+)+/g){
    	my @names = $l =~ m/(NTC_WP[\d\.]+_E\w+)+/g;
    	my @n2 = $l =~ m/(NTC_WP[\d\.]+_E\w+)+/g;
    	foreach my $n (@names){
    		print $n."\n";
    	}
    	print "\n";
    	foreach my $n (@n2){
    		print $n."\n";
    	}
    	print "\n";
    }
    donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    NTC_WP1.1.8_E01_original
    NTC_WP1.2.4_E02
    NTC_WP2.1_E04
    NTC_WP2.3_E01
    NTC_WP3.1_E03
    NTC_WP4.1.1_E01
    NTC_WP4.1.3_E03
    NTC_WP4.2.2_E19
     
    NTC_WP1.1.1_E02
    NTC_WP1.1.8_E01_original
    NTC_WP1.2.4_E02
    NTC_WP2.1_E04
    NTC_WP2.3_E01
    NTC_WP3.1_E03
    NTC_WP4.1.1_E01
    NTC_WP4.1.3_E03
    NTC_WP4.2.2_E19
    quand tu récupères @names, tu récupères la totalité des matchs donc le pointeur est remis à zéro
    Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
    Plus les choses changent, plus elles restent les mêmes

  4. #4
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Merci beaucoup pour ces explications, je peux clore le sujet


    Nouveau code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    while(my $l = <DATA>){
     
    	if (my @names = $l =~ m/(NTC_WP[\d\.]+_E\w+)+/g){
     
    		foreach my $n (@names){
    			print $n."\n";
    		}
    		print "\n";
    	}
    }
    close($file_names);
    -- Jasmine --

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

Discussions similaires

  1. VBS et REGEXP - motif prospectif négatif
    Par orducom1 dans le forum VBScript
    Réponses: 1
    Dernier message: 11/05/2010, 15h00
  2. [RegEx] Regexp, motif erroné
    Par Pabavard dans le forum Langage
    Réponses: 3
    Dernier message: 27/11/2007, 16h02
  3. Motif qui se repete en background
    Par Aspic dans le forum Dreamweaver
    Réponses: 14
    Dernier message: 17/07/2007, 17h42
  4. [AJAX] PB avec motif récupéré et new RegExp() !
    Par kakou dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 22/08/2006, 10h36
  5. Détection d'un motif - Regexp
    Par GLDavid dans le forum Linux
    Réponses: 9
    Dernier message: 09/11/2005, 07h11

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