[PERL] Occurences exactes d'un caractère dans plusieurs lignes
Résolu/Fermé
astralangel
Messages postés
37
Date d'inscription
samedi 15 décembre 2012
Statut
Membre
Dernière intervention
18 février 2016
-
8 janv. 2014 à 16:54
astralangel Messages postés 37 Date d'inscription samedi 15 décembre 2012 Statut Membre Dernière intervention 18 février 2016 - 8 janv. 2014 à 21:03
astralangel Messages postés 37 Date d'inscription samedi 15 décembre 2012 Statut Membre Dernière intervention 18 février 2016 - 8 janv. 2014 à 21:03
A voir également:
- [PERL] Occurences exactes d'un caractère dans plusieurs lignes
- Caractère ascii - Guide
- Caractere speciaux - Guide
- Caractère spéciaux - Guide
- Caractere speciaux mac - Guide
- Écrire plusieurs lignes dans une cellule excel mac - Guide
2 réponses
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
Modifié par [Dal] le 8/01/2014 à 17:59
Modifié par [Dal] le 8/01/2014 à 17:59
Salut astralangel,
Je crois que ton titre est mal libellé, car tu y dis "[PERL] Occurences exactes d'un caractère dans plusieurs lignes" alors que tu dis dans ton message "je dois filtrer des lignes, contenant exactement X fois un caractère spécifique" ce qui veux dire que tu cherches à savoir, pour chaque ligne (et non dans plusieurs lignes), si cette ligne comporte un certain nombre d'occurrences d'une lettre. Je pars donc de cette 2ème hypothèse.
A ma connaissance le quantificateur ne va quantifier que des caractères consécutifs.
Pour matcher les lignes comportant 3 lettres m, où qu'elles soient, tu peux faire, par exemple, de ces deux façons :
Le 2ème cas te sera utile si tu ne connais pas à l'avance la lettre à rechercher ou le nombre de répétitions. Le modificateur g permet de faire un "global matching", qui répète la recherche tant qu'il y a des données correspondantes à ta recherche. Les matches sont renvoyés sous forme d'un tableau. Il suffit d'évaluer le tableau en tant que scalaire pour savoir combien d'éléments il contient.
Dal
Je crois que ton titre est mal libellé, car tu y dis "[PERL] Occurences exactes d'un caractère dans plusieurs lignes" alors que tu dis dans ton message "je dois filtrer des lignes, contenant exactement X fois un caractère spécifique" ce qui veux dire que tu cherches à savoir, pour chaque ligne (et non dans plusieurs lignes), si cette ligne comporte un certain nombre d'occurrences d'une lettre. Je pars donc de cette 2ème hypothèse.
A ma connaissance le quantificateur ne va quantifier que des caractères consécutifs.
Pour matcher les lignes comportant 3 lettres m, où qu'elles soient, tu peux faire, par exemple, de ces deux façons :
#!/usr/bin/perl use strict; use warnings; my $st = "commentcamarche.net"; # méthode 1 if ($st =~ /^.*m.*m.*m.*$/) { print("Il y a bien 3 lettres m\n"); } # méthode 2 my $lettre = "m"; my $repetitions = 3; my @matches = ($st =~ /$lettre/g); if (scalar @matches == $repetitions) { print("Il y a bien $repetitions lettres $lettre\n"); }
Le 2ème cas te sera utile si tu ne connais pas à l'avance la lettre à rechercher ou le nombre de répétitions. Le modificateur g permet de faire un "global matching", qui répète la recherche tant qu'il y a des données correspondantes à ta recherche. Les matches sont renvoyés sous forme d'un tableau. Il suffit d'évaluer le tableau en tant que scalaire pour savoir combien d'éléments il contient.
Dal
astralangel
Messages postés
37
Date d'inscription
samedi 15 décembre 2012
Statut
Membre
Dernière intervention
18 février 2016
8 janv. 2014 à 21:03
8 janv. 2014 à 21:03
Bonsoir Dal,
merci beaucoup pour ta réponse! En effet, je me suis un peu mal exprimé (c'est du au fait que mon cerveau fût en ébullition, à force de chercher une solution, j'avais un peu du mal pour rédiger le topic mdr).
J'ai utilisé la première méthode que tu m'as proposé et elle fonctionne comme je le demande! J'ai opté pour celle-ci car il m'a été conseillé d'alourdir au minimum ma syntaxe.
Et je m'attendais pas à cette syntaxe là vu que j'utilisais que des quantificateurs! Comme quoi on en apprend tous les jours ^^.
Une nouvelle fois: merci beaucoup!
Astralangel.
merci beaucoup pour ta réponse! En effet, je me suis un peu mal exprimé (c'est du au fait que mon cerveau fût en ébullition, à force de chercher une solution, j'avais un peu du mal pour rédiger le topic mdr).
J'ai utilisé la première méthode que tu m'as proposé et elle fonctionne comme je le demande! J'ai opté pour celle-ci car il m'a été conseillé d'alourdir au minimum ma syntaxe.
Et je m'attendais pas à cette syntaxe là vu que j'utilisais que des quantificateurs! Comme quoi on en apprend tous les jours ^^.
Une nouvelle fois: merci beaucoup!
Astralangel.