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

Marco A P D'Andrade mdacwb em gmail.com
Quinta Junho 1 20:28:27 PDT 2006


Rolou na lista do cascavel, que confesso me surpreendeu um pouco (eh
... ja faz muito tempo que nao leio manuais ...)

Não consegui chegar a um codigo produtivo, mas ja passa da meia noite
e o sono está forte!!



Abaixo uma fração do "perlre.pod" ...


(?{ code })
    WARNING: This extended regular expression feature is considered
highly experimental, and may be changed or deleted without notice.

    This zero-width assertion evaluates any embedded Perl code. It
always succeeds, and its code is not interpolated. Currently, the
rules to determine where the code ends are somewhat convoluted.

    This feature can be used together with the special variable $^N to
capture the results of submatches in variables without having to keep
track of the number of nested parentheses. For example:

      $_ = "The brown fox jumps over the lazy dog";
      /the (\S+)(?{ $color = $^N }) (\S+)(?{ $animal = $^N })/i;
      print "color = $color, animal = $animal\n";


Claro que o codigo da Camila atende à solicitação!

Vale ressaltar que ER é algo muito poderoso, mas existe um custo
consideravel de processamento, e deve ser feito com criterio... ou
seja ... não é a solução magica para tudo (é quase isso) ...


2006/6/1, Camila Mattos MK <misskaapow em gmail.com>:
> /^(1[6-9]|2\d|3[0-4])$/ ?!
> deve ter outra maneira mais bonita de fazer, mas como eu tô meio
> ocupada agora não dá pra pensar melhor...
>
> On 6/1/06, Breno G. de Oliveira <breno em clavis.com.br> wrote:
> > Pessoal,
> >
> > recentemente um amigo meu me apresentou o seguinte problema:
> >
> > "como fazer uma ER que só case se encontrar um número dentro de um
> > intervalo/alcance/range qualquer?"
> >
> > Bem - disse eu -,  para fazer isso com números entre 0 e 9 é
> > relativamente fácil. Para buscar, por exemplo, por números entre 5 e 8,
> > poderíamos usar:
> >
> > /[5678]/
> >
> > Mas e quando queremos encontrar números com mais de um dígito?
> >
> >
> > Eis, então, o problema: fazer uma ER que case SE E SOMENTE SE o valor
> > estiver entre 16 e 34.
> >
> > Em Perl 6 é fácil (aí Fernando! ;P), partindo do princípio que o RFC 197
> > foi respeitado, bastaria fazer:
> >
> > /(16,32)/
> >
> > mas e em Perl 5? Alguém se habilita?
> >
> > obs: não vale fazer /16|17|18|19|20|21|...|29|30|31|32/   =)
> >
> >
> > []s
> >
> > breno
> > _______________________________________________
> > Rio-pm mailing list
> > Rio-pm em pm.org
> > http://mail.pm.org/mailman/listinfo/rio-pm
> >
>
>
> --
> []s,
> camila mattos "mk."
>
> "there is more than one way to do it";
>
> http://designerfakes.net ; porfolio
> #392689 ; linux user
> _______________________________________________
> Rio-pm mailing list
> Rio-pm em pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>


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