<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html;charset=windows-1252"
http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
Olá Mantovani!<br>
<br>
Vc poderia me explicar melhor<br>
<br>
Daniel de Oliveira Mantovani escreveu:
<blockquote
cite="mid:x2x214823ca1004251027hd4cd3c2fs32a283c1bbe087fc@mail.gmail.com"
type="cite">
<pre wrap="">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".
</pre>
</blockquote>
Até aqui blz!...entendi que foi armazena 'Flintstone' no buffer<br>
<br>
<blockquote
cite="mid:x2x214823ca1004251027hd4cd3c2fs32a283c1bbe087fc@mail.gmail.com"
type="cite">
<pre wrap="">
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}";
}
</pre>
</blockquote>
É aqui que não estou enxergando o funcionamento da coisa!<br>
Deixa ver se entendi!<br>
O primeito "\w+ " seria [espaço]Wilma[espaço]<br>
O segundo "\w+" seia [espaço]Silva[espaço]<br>
<br>
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" ??<br>
<br>
Tipo assim, supondo que eu tivesse uma nova string:<br>
my $names = 'Fred Manoel Silva Flinstone and Wilma Manoel Silva
Flinstone';<br>
<br>
eu teria que fazer no mei if :<br>
if ( $names =~ m/(?<last_name>\w+) and <b>\w+ \w+ \w+</b>
\g{last_name}/ ) {<br>
say "I saw $+{last_name}";<br>
}<br>
<br>
É isto?<br>
<br>
Abraço,<br>
Flávio<br>
<br>
<br>
<br>
<blockquote
cite="mid:x2x214823ca1004251027hd4cd3c2fs32a283c1bbe087fc@mail.gmail.com"
type="cite">
<pre wrap="">[]'s
2010/4/25 "Flávio R. Lopes" <a class="moz-txt-link-rfc2396E" href="mailto:flavio.lopes@links.inf.br"><flavio.lopes@links.inf.br></a>:
</pre>
<blockquote type="cite">
<pre wrap="">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
<a class="moz-txt-link-abbreviated" href="mailto:SaoPaulo-pm@pm.org">SaoPaulo-pm@pm.org</a>
<a class="moz-txt-link-freetext" href="http://mail.pm.org/mailman/listinfo/saopaulo-pm">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>
</pre>
</blockquote>
<pre wrap=""><!---->
</pre>
</blockquote>
<br>
</body>
</html>