Salut kilian,
l'idée n'est pas mauvaise. En fonction des besoins je l'utilise souvent. Paradoxal elle m'a echappé en pensant aux regex et pas à la comparaison.
Voilà je me suis amusé un peu
#! /usr/bin/perl
use warnings;
use strict;
my $ch ='dsfds 45 dsfds 254 dsfsd 1-25 5,25,78,54,987 45454545 75487 et a la fin 05.';
print "avec grep\n\n";
print grep { ($_ =~ /\d+/)?( $_ >= 1 && $_ <= 60 ):1 }
split(/[^0-9]/,$ch),"\n";
print "avec map\n\n";
print map { if ($_=~/\d+/ && ( $_ >=1 && $_ <= 60)) { $_ .= " "} }
split(/[^0-9]/,$ch),"\n";
print "\net regex\n\n";
while ($ch =~/(?<=\D) # test arriere non chiffre
( 0? # les cas 01...09 optionnel
[1-9] # les cas 1..9
| # ou
[1-5][0-9] # les cas 10...59
)
(?=\D|$) # test avant non chiffre ou fin de chaine
/gx) { # recherche progressive en contexte scalaire
print "$1 dans la positon ",pos($ch) - 1,"\n";
}
[lamitest@localhost corbeille]$ perl 000.pl
avec grep
451255255405
avec map
45 1 25 5 25 54 05
et regex
45 dans la positon 8
1 dans la positon 26
25 dans la positon 29
5 dans la positon 31
25 dans la positon 34
54 dans la positon 40
05 dans la positon 74