|
|
|
|
Bonjour,
Voila, j'ai un petit probleme qui se pose a moi !!
J'essaye avec les espressiosn regulieres en PHP de trouver un nombre entre 1 et 60.
J'ai donc essayé pleins de trucs depuis 1h comme
[0-59]
([0-5]?/d{1}
(1|2|3|4|5)/d
.......
en gros ce ne sont que 2,3 petits exemples de ce que j'ai testé, mais cela ne marche pas du tout car qd je tappe 78413 par exemple ca me le laisse passer !!
je sais que c tout bete, mais si quelqu'un pouvait m'eclirer la lanterne !!
merci a toute !!
Salut,
|
Personnelement, je transformerais toute la chaine en un tableau (dont le séparateur sera tout ce qui n'est pas un chiffre)
$tab_num=split('[^0-9]', $texte);
Et pour tout élément de $tba_num, tu fais ton test foreach ($tab_num as $num)
{
if ( ($num <=60) && ($num >=1) ){
//Patati, patata...
}
}
Note trouvée sur le site de Php: preg_split est plus rapide que split.... |
Salut kilian,
#! /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 |