[SP-pm] Expressões Regulares

Daniel de Oliveira Mantovani daniel.oliveira.mantovani at gmail.com
Sun Apr 25 12:04:15 PDT 2010


2010/4/25 "Flávio R. Lopes" <flavio.lopes em links.inf.br>:
> Olá Mantovani!
>
> Vc poderia me explicar melhor
>
> Daniel de Oliveira Mantovani escreveu:
>
> if( $names =~ m/(?<last_name>\w+) and \w+ \g{last_name}/ ) {
> Ele não teria que retornar "Silva Flintstone" e nem ao menos "Silva"
> porque dentro do buffer "<foo>" está "Flinstone", logo quando você faz
> o backreference  \g{last_name},
> você está capturando o buffer "<foo"> que é "Flinstone".
>
>
> Até aqui blz!...entendi que foi armazena 'Flintstone' no buffer
>
> Para o match do seu if ser verdadeiro, você precisa colocar a
> backreference no lugar que faça o match, daquele jeito só daria certo
> se o buffer fosse Silva.
> if ( $names =~ m/(?<last_name>\w+) and \w+ \w+ \g{last_name}/ ) {
>     say "I saw $+{last_name}";
> }
>
>
>
> É aqui que não estou enxergando o funcionamento da coisa!
> Deixa ver se entendi!
> O primeito "\w+ " seria [espaço]Wilma[espaço]
> O segundo "\w+" seia [espaço]Silva[espaço]
>
> O que vc faz é tipo de um "ponteiro" para compensar a inserção de mais uma
> palavra antes que seja chamado o que está armazena no buffer \g{last_name},
> que no caso é "Flintstone" ??

Para você saber exatamente, perldoc perlre.

>
> Tipo assim, supondo que eu tivesse uma nova string:
> my $names = 'Fred Manoel Silva Flinstone and Wilma Manoel Silva Flinstone';
>
> eu teria que fazer no mei if :
> if ( $names =~ m/(?<last_name>\w+) and \w+ \w+ \w+ \g{last_name}/ ) {
>     say "I saw $+{last_name}";
> }
>
> É isto?

Sim, é isso mesmo. Até ontem você não sabia a diferença entre criar um
hash e imprimir um hash e hoje você já está entendendo expressões
regulares. Parabéns você está aprendendo bem rápido. Esse livro que
você está lendo, me parece interessante pois já está até falando de
Perl 5.10, qual o nome dele mesmo ?

[]'s

>
> Abraço,
> Flávio
>
>
>
> []'s
>
>
> 2010/4/25 "Flávio R. Lopes" <flavio.lopes em links.inf.br>:
>
>
> Pessoal, estou tendo dificuldade em enxergar o funcionamento deste programa:
>
> use 5.010;
> my $names = 'Fred Flinstone and Wilma Flinstone';
> if( $names =~ m/(?<last_name>\w+) and \w+ \g{last_name}/ ) {
>   say "I saw $+{last_name}";
>   }
>
>
> Se eu alterar a variavel "$names" para:
> my $names = 'Fred Silva Flinstone and Wilma Silva Flinstone';
>
> O programa não me retorna mais o sobrenome!!
>
> Como Perl faz esta busca?, ou seja, com o *\w* (que busca tudo) e tendo como
> _delimitador_ o "and", ele não teria que me retornar "Silva Flintstone"
> ??...ou pelo menos "Silva" ??
>
> Alguém pode me ajudar a enteder este código?
>
> Abraço,
> Flávio
>
> _______________________________________________
> SaoPaulo-pm mailing list
> SaoPaulo-pm em pm.org
> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>
>
>
>
>
> _______________________________________________
> SaoPaulo-pm mailing list
> SaoPaulo-pm em pm.org
> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>



-- 
"If you’ve never written anything thoughtful, then you’ve never had
any difficult, important, or interesting thoughts. That’s the secret:
people who don’t write, are people who don’t think."


More information about the SaoPaulo-pm mailing list