[Rio-pm] range de números em regexp

Eduardo Maia maia em suaweb.com
Sábado Junho 10 13:54:26 PDT 2006


Salve, salve!!!

Infelizmente não pude comparecer no último encontro social. Eu tava muito a fim de ir, meu pensamento tava lá com vocês, pena que ele não ficou bêbado, e nem conversou com ninguém que tava lá. E aí, Camila dormiu na mesa de novo?! :)

Robson pagou mico em regexp?! Hehehehe!

Não gostei da solução da Camila para a regexp do Breno, ela só sintetizou aquele monte de "ou" que o Breno comentou. Como assim ninguém dá uma solução bonita para essa questão?!

\D = Match qualquer caracter que não seja dígito

bash-3.00$ perl
$string="Tenho 100 anos";
if ($string =~ /\D[12][0-9]\D/) {
     print "Possui número entre 10 e 29\n";
} else {
     print "NAO possui numero entre 10 e 29\n";
}
NAO possui numero entre 10 e 29
bash-3.00$ perl
$string="Tenho 15 anos";
if ($string =~ /\D[12][0-9]\D/) {
     print "Possui número entre 10 e 29\n";
} else {
     print "NAO possui numero entre 10 e 29\n";
}
Possui número entre 10 e 29
bash-3.00$ perl
$string="Tenho 30 anos";
if ($string =~ /\D[12][0-9]\D/) {
     print "Possui número entre 10 e 29\n";
} else {
     print "NAO possui numero entre 10 e 29\n";
}
NAO possui numero entre 10 e 29
bash-3.00$ perl
$string="Tenho 10 anos";
if ($string =~ /\D[12][0-9]\D/) {
     print "Possui número entre 10 e 29\n";
} else {
     print "NAO possui numero entre 10 e 29\n";
}
Possui número entre 10 e 29
bash-3.00$ perl
$string="Tenho 20 anos";
if ($string =~ /\D[12][0-9]\D/) {
     print "Possui número entre 10 e 29\n";
} else {
     print "NAO possui numero entre 10 e 29\n";
}
Possui número entre 10 e 29
bash-3.00$ perl
$string="Tenho 120 anos";
if ($string =~ /\D[12][0-9]\D/) {
     print "Possui número entre 10 e 29\n";
} else {
     print "NAO possui numero entre 10 e 29\n";
}
NAO possui numero entre 10 e 29
bash-3.00$ 

Se a gente quiser considerar que "Tenho 3130 anos" match 13, é só tirar o \D:

bash-3.00$ perl
$string="Tenho 3130 anos";
if ($string =~ /[12][0-9]/) {
     print "Possui número entre 10 e 29\n";
} else {
     print "NAO possui numero entre 10 e 29\n";
}
Possui número entre 10 e 29
bash-3.00$ perl
$string="Tenho 3130 anos";
if ($string =~ /\D[12][0-9]\D/) {
     print "Possui número entre 10 e 29\n";
} else {
     print "NAO possui numero entre 10 e 29\n";
}
NAO possui numero entre 10 e 29

Abraços!



Mais detalhes sobre a lista de discussão Rio-pm