[Cascavel-pm] Quando usar Gramatica e quando usar Regexp? [Was: Artigo - Como Perl Salvou o Projeto Genoma]
Wendel Scardua
wendelscardua em gmail.com
Quinta Maio 24 11:48:19 PDT 2007
Essa linha não imprimiu nada...
perl -e '$str = "aaabbb"; print 42,"\n" if $str =~
/a(?:n(?{$c++}))*b(??{'n' x $c})$/;'
Aliás, não consegui nem entender essa regex aí... ela criaria uma variável
"n" contendo o número de vezes que "a" aparece ?
(olhando melhor...)
ei, cê fez ela bater com "a n^k b n^k" ... tá, quase a mesma coisa, exceto
que esta regexp poderia ser escrita simplesmente como /a(n*)b\1/ .
De qualquer jeito, você tá dependendo de um eval, ou seja, não é uma regexp
"de verdade" - na verdade, backreferences também são trapaças para regexps
teóricas, mas elas não envolvem eval e não aumentam tanto assim a
expressividade das regexps (você continua não podendo fazer "a^n b^n" ).
Acho até que algum perldoc avisa para não usar essas construções. Lembrei,
perldoc perlre:
"(?{ 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.
(...)
"(??{ code })"
WARNING: This extended regular expression feature is
considered highly experimental, and may be changed or deleted
without notice. A simplified version of the syntax may be
introduced for commonly used idioms.
[]s
Wendel
On 5/24/07, Nilson Santos Figueiredo Junior <acid06 em gmail.com> wrote:
>
> On 5/24/07, Wendel Scardua <wendelscardua em gmail.com> wrote:
> > A string "a^n b^n" (que não é regular) não pode ser reconhecida com uma
> > regexp do Perl (a menos de trapaças envolvendo "use re 'eval'").
>
> $str =~ /a(?:n(?{$c++}))*b(??{'n' x $c})$/;
>
> Devem ter outros jeitos melhores ainda.
> Por esse tipo de coisa que regex de Perl é melhor que das outras
> linguagens...
>
> -Nilson Santos F. Jr.
--
"Não ajustar o auto-ajuste" - http://wendel.scardua.net/
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://mail.pm.org/pipermail/cascavel-pm/attachments/20070524/62020492/attachment-0001.html
Mais detalhes sobre a lista de discussão Cascavel-pm