[SP-pm] Res: Regular Expression

Lucas Zechim lzechim em gmail.com
Terça Janeiro 30 04:06:29 PST 2007


Eu tinha feito exatamente isso, antes de tentar usar regex.
Nem me liguei que isso poderia custar menos para a máquina...

Valeu pela dica!

On 1/25/07, Eden Cardim <edencardim em gmail.com> wrote:
> On 1/24/07, Wendel Scardua <wendelscardua em gmail.com> wrote:
> > Não, pq isso vai imprimir zechim, e ele quer lzechim (em resumo, ele quer
> > transformar wendel.scardua em wscardua)
> >
> > $n = 'lucas.zechim';
> >  $n =~ s/^(.)[^.]*\./$1/
> > print $n;
> >
> > A regexp também pode ser  s/(?<=^.)[^.]*\.//
>
> Fiquei curioso quanto às implicações de desempenho dessas duas
> regexes. Usar lookbehind tipicamente aumenta o custo da regex, porém,
> neste caso, evita o uso de capturas, que também aumentam o custo. Será
> que vale a pena trocar capturas por asserções de lookbehind? Para
> comparar com as duas versões, utilizei um terceiro método, que não
> utiliza capturas nem lookbehind, mas requer alguns passos adicionais
> além da substituicao. Eis os resultados:
>
> eden em anubis:~$ perl -MBenchmark=:all -e'$n = "lucas.zechim";
> timethese(10000000, { capture => sub {$m = $n; $m =~
> s/^(.)[^.]*\./$1/}, lookbehind => sub {$m = $n; $m =~
> s/(?<=^.)[^.]*\.//} , butchery => sub {$m = $n; $o = substr($m, 0, 1);
> $m =~ s/.*\.//; $m = "$o$m" } } )'
> Benchmark: timing 10000000 iterations of butchery, capture, lookbehind...
>   butchery: 14 wallclock secs (14.68 usr + -0.01 sys = 14.67 CPU) @
> 681663.26/s (n=10000000)
>    capture: 29 wallclock secs (29.63 usr +  0.02 sys = 29.65 CPU) @
> 337268.13/s (n=10000000)
> lookbehind: 18 wallclock secs (18.49 usr +  0.08 sys = 18.57 CPU) @
> 538502.96/s (n=10000000)
>
> Conclusão: A penalidade das capturas é bem maior do que a penalidade
> de lookbehind. Como os dois são bastante custosos, as vezes vale a
> pena acrescentar algumas etapas fora da regex para obter o resultado,
> como foi o caso presente.
>
> --
> Eden Cardim
> Instituto Baiano de Biotecnologia
> Núcleo de Biologia Computacional e Gestão de Informações Biotecnológicas
> Laboratório de Bioinformática
> --
> "you seem to think that 'close enough' is close enough...
> please learn to be 'literal' around programming."
> merlyn - on irc.freenode.net#perl
> _______________________________________________
> SaoPaulo-pm mailing list
> SaoPaulo-pm em pm.org
> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>


-- 
  Lucas Zechim
lzechim em gmail.com


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