[SP-pm] Expressões Regulares

Daniel de Oliveira Mantovani daniel.oliveira.mantovani at gmail.com
Sun Apr 25 10:27:06 PDT 2010


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".

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}";
}

[]'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
>



-- 
"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