Bonjour,
j'essai de faire une expression réguliere qui accepte 5 ou 8 caractéres alphanumérique.
J'ai essayé :
/[a-zA-Z0-9]{5}|[a-zA-Z0-9]{10}/
mais ça marche pas.
Merci
Bonjour,
j'essai de faire une expression réguliere qui accepte 5 ou 8 caractéres alphanumérique.
J'ai essayé :
/[a-zA-Z0-9]{5}|[a-zA-Z0-9]{10}/
mais ça marche pas.
Merci
L'expression pour matcher exactement 5 ou 8 caractères est la suivante :
/\b(\w{5}|\w{8})\b/
Exemple :
\b sert à matcher un "word boundary", c'est à dire une pseudo-chaine de taille zéro (une assertion) correspondant à une transition entre un caractère \w et un caractère \W (ou inversement).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3perl -E '@a = map ".".("a" x $_).".", 1 .. 10; print map "$_\n", grep /\b(\w{5}|\w{8})\b/, @a;' .aaaaa. .aaaaaaaa.
Merci beaucoup. ça fonctionne parfaitement
Juste un petit point: \w reconnaît non seulement [a-zA-Z0-9] mais aussi le caractère '_' (soulignement ou underscore).
"67_AB" sera donc aussi reconnu par l'expression régulière de Philou, alors que ce n'était pas le cas avec celle de Chezdevelopping.
- La programmation fonctionnelle en Perl : 1. Les opérateurs de liste; 2. Les fonctions d'ordre supérieur; 3. Étendre le langage.
- Comment utiliser des décorateurs en Perl: Un tutoriel pour changer le comportement d'une fonction sans en modifier le code source
- De Perl 5 à Perl 6 : 1. Les bases; 2. Les nouveautés; 3. Approfondissements; 4. Annexe 1: Ce qui change entre Perl 5 et Perl 6; Annexe 2: Les nouveautés de Perl 6.
- Les regex et grammaires de Perl 6
- Objets, classes et rôles en Perl 6 - Tutoriel de programmation orientée objet
- Tour d'horizon du nouveau langage Perl 6
C'est vrai que j'ai utilisé \w sans faire cette précision. Je l'ai surtout fait comme raccourci.
Ceci signifie aussi que \b se basant sur \w et \W, intègrera également le _ dans la recherche de frontière de mot (_ étant intégré dans le mot, et non dans le "non mot" ; ceci implique qu'un _ ne pourra pas servir de frontière de mot entre deux caractères alphanumériques strict).
La classe de caractère alpha-numérique peut être également définir ainsi : [:alnum:]
Ainsi, au sens strict, si l'on souhaite exclure le soulignement des mots, l'expression régulière deviendrait :
Code : Sélectionner tout - Visualiser dans une fenêtre à part perl -E '@a = map "._".("a" x $_).".", 0 .. 10; print map "$_\n", grep /[^[:alnum:]]([[:alnum:]]{5}|[[:alnum:]]{8})[^[:alnum:]]/, @a;'
Partager