[Rio-pm] Expressão Regular m//

Blabos de Blebe blabos em gmail.com
Sábado Dezembro 1 16:52:41 PST 2007


Breno, digamos que ao inves de $string a variavel fosse $s, vc teria 48.

Nesse caso eu apelaria para

<code>
$_="Estou feliz, passei em Matematica Discreta I, feliz!";
$_=@_=/feliz/g;print"Apareceu $_ vezes...\n"
</code>

E descartada a primeira linha, eu teria 44.
Tá valendo?


On Dec 1, 2007 9:49 PM, breno <breno em rio.pm.org> wrote:

> Pra golfe, realmente. Mas como resposta para a pergunta do Gabriel
> (que está aprendendo Perl ainda) acho que a melhor é a que está no
> próprio FAQ do Perl, parecida com a versão do Lorn:
>
> ------------------8<-----------------
>
> $cont++ while $string =~ /feliz/g;
>
> ------------------8<-----------------
>
> Agora, se estamos falando de golfe, aí vai a minha tacada!
>
> (supondo a linha anterior como: my $string = "Estou feliz, passei em
> Matematica Discreta I, feliz!";
> e a saida como tendo que ser "apareceu X vezes..." e quebrar linha no
> final)
> $c=@b=$string=~/feliz/g;print"apareceu $c vezes...\n"
>
> 53 caracteres :-)
>
> obs: redução da versão do Fernando, que aparentemente esqueceu que a
> diferença entre o print e o printf é grande :-P
>
> []s
>
> -b
>
> On Dec 1, 2007 6:31 PM, Fernando Oliveira <fernandocorrea em gmail.com>
> wrote:
> > sim...mas ainda tenho menos caracteres...
> >
> > Em 01/12/07, Blabos de Blebe <blabos em gmail.com> escreveu:
> > >
> > >
> > >
> > > Detalhe besta, como quase disse o fernando, m// no contexto de lista
> > retorna $1, $2, ..., $N,
> > > porém utilizando o modificador g, retorna todas as substrings que
> > combinaram. Depois é só
> > > contar o tamanho da lista.
> > >
> > > E, não, eu não sabia isso de cabeça, é que eu to nesse capítulo do
> > livro... :p
> > >
> > > O exemplo do livro diz algo parecido com
> > >
> > > <code>
> > >
> > > my $string = "Estou feliz, passei em Matematica Discreta I, feliz!";
> > > printf "Apareceu %s vezes...\n", $c=@b=$string=~/feliz/g;
> > >
> > > </code>
> > >
> > > Na verdade era mais pra <code> scalar( @b = $string =~ /feliz/g );
> > </code>, que eu
> > > achei longo, mas mais legível.
> > >
> > > Espero ter ajudado
> > >
> > >
> > >
> > >
> > >
> > > On Dec 1, 2007 1:46 PM, Fernando Oliveira < fernandocorrea em gmail.com>
> > wrote:
> > >
> > > > o m//g em contexto de lista retorna uma lista com $1, $2, ..., $N.
> Mas
> > em contexto estalar só retorna um booleano... uma solução com menor
> > performance, mas com menos caracteres q o for, seria:
> > > >
> > > > <code>
> > > >
> > > > my $string = "Estou feliz, passei em Matematica Discreta I, feliz!";
> > > > printf "Apareceu %s vezes...\n", scalar($string =~ s/(feliz)/$1/g);
> > > > </code>
> > > >
> > > >
> > > > Em 01/12/07, Marco A P D'Andrade < mdacwb em gmail.com> escreveu:
> > > >
> > > >
> > > >
> > > > > Hummm...
> > > > >
> > > > > Posso estar enganado, mas acho que existem mais nuancias...
> > > > > (daqui não tenho como testar, e quero dar meu pitaco ;) )
> > > > >
> > > > > Reforçando o contexto scalar da regex, com o argumento "g" já é
> feita
> > > > > a pesquisa completa.
> > > > >
> > > > > my $string = 'Estou feliz, passei em Matematica Discreta I,
> feliz!';
> > > > > printf "Apareceu %s vezes...\n", scalar($string =~ m/feliz/g);
> > > > >
> > > > > Se fosse utilizado um foreach, em vez do while eu não teria tanta
> > > > > dúvida sobre o loop, pois seriam avaliados todos os elementos
> > > > > retornados, já o while, não sei se na proxima interação ele refará
> a
> > > > > pesquisa...
> > > > >
> > > > > Ok... devia ter testado, mas queria dar o pitaco ;)
> > > > >
> > > > > Sds,
> > > > > Marco Antonio
> > > > >
> > > > > Em 01/12/07, Lorn< lorn.br em gmail.com> escreveu:
> > > > > > Você estava checando só uma vez :P precisa checar até acabar
> toda a
> > frase :)
> > > > > >
> > > > > >
> > > > > > use warnings;
> > > > > > use strict;
> > > > > >
> > > > > > my $cont;
> > > > > > my $string = 'Estou feliz, passei em Matematica Discreta I,
> feliz!';
> > > > > > &aparece($string);
> > > > > >
> > > > > > sub aparece{
> > > > > >   my $frase = shift();
> > > > > >   while ($string =~ m/feliz/g){
> > > > > >     $cont++;
> > > > > >   };
> > > > > >   print "Feliz apareceu $cont vezes\n";
> > > > > > }
> > > > > >
> > > > > > On Dec 1, 2007 11:41 AM, gabriel lima <
> gabriellima333 em hotmail.com>
> > wrote:
> > > > > > >
> > > > > > >
> > > > > > > Olá pessoal tudo bem?
> > > > > > > Estava tentando criar uma sub-rotina simples apenas
> > > > > > > para estudo da linguagem Perl. Esta sub-rotina mostra
> > > > > > > quantas vezes uma palavra aparece em uma string.
> > > > > > > O problema é que ela só retorna 1, ou seja, fala que
> > > > > > > só acha esta palavra uma vez, mesmo tendo aparecido
> > > > > > > repetida vezes na string, veja:
> > > > > > >
> > > > > > > #! D:\Perl\bin\Perl.exe
> > > > > > >
> > > > > > > use warnings;
> > > > > > > use strict;
> > > > > > >
> > > > > > > my $cont;
> > > > > > > my $string = 'Estou feliz, passei em Matematica Discreta I,
> > feliz!';
> > > > > > > &aparece($string);
> > > > > > >
> > > > > > > sub aparece{
> > > > > > >   my $frase = shift();
> > > > > > >   $cont++ if $string =~ m/feliz/;
> > > > > > >   print "Feliz apareceu $cont vezes\n";
> > > > > > > }
> > > > > > >
> > > > > > > Saída -> Feliz apareceu 1 vezes
> > > > > > >
> > > > > > > ________________________________
> > > > > > Receba as últimas notícias do Brasil e do mundo direto no seu
> > Messenger! É
> > > > > > GRÁTIS! Assine já!
> > > > > > > _______________________________________________
> > > > > > > Rio-pm mailing list
> > > > > > > Rio-pm em pm.org
> > > > > > > http://mail.pm.org/mailman/listinfo/rio-pm
> > > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > > --
> > > > > > Lindolfo "Lorn" Rodrigues
> > > > > > - www.slackwarezine.com.br
> > > > > > - http://lornlab.org
> > > > > > - http://sao-paulo.pm.org
> > > > > > use Catalyst;
> > > > > > _______________________________________________
> > > > > > Rio-pm mailing list
> > > > > > Rio-pm em pm.org
> > > > > > http://mail.pm.org/mailman/listinfo/rio-pm
> > > > > >
> > > > > _______________________________________________
> > > > > Rio-pm mailing list
> > > > > Rio-pm em pm.org
> > > > > http://mail.pm.org/mailman/listinfo/rio-pm
> > > > >
> > > >
> > > >
> > > >
> > > > --
> > > > []'s Fernando
> > > > _______________________________________________
> > > > Rio-pm mailing list
> > > > Rio-pm em pm.org
> > > > http://mail.pm.org/mailman/listinfo/rio-pm
> > > >
> > >
> > >
> > > _______________________________________________
> > >
> > > Rio-pm mailing list
> > > Rio-pm em pm.org
> > > http://mail.pm.org/mailman/listinfo/rio-pm
> > >
> >
> >
> >
> > --
> > []'s Fernando
> > _______________________________________________
> > Rio-pm mailing list
> > Rio-pm em pm.org
> > http://mail.pm.org/mailman/listinfo/rio-pm
> >
> _______________________________________________
> Rio-pm mailing list
> Rio-pm em pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://mail.pm.org/pipermail/rio-pm/attachments/20071201/c22424ee/attachment-0001.html 


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