<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html;charset=iso-8859-1" http-equiv="Content-Type">
  <title></title>
</head>
<body bgcolor="#ffffff" text="#000000">
Oi Gabriel!<br>
<br>
Nossa cara!...t&ocirc; tomando um cacete de regex!<br>
<br>
Putz....num fica bravo, mas n&atilde;o entendi direito sua explica&ccedil;&atilde;o.<br>
<br>
Na parte em que vc se diz que eu "quebrei a sequencia" ao inserir
'Silva' n&atilde;o estaria mantendo o mesmo padr&atilde;o, ou seja, o proximo \w+ (do
passo 3) ainda n&atilde;o estaria no mesmo padr&atilde;o? pois ainda assim ter&iacute;amos o
"and" seguinte de um espa&ccedil;o at&eacute; a palavra "Flintstone"<br>
<br>
Deixa ver se te explico melhor como vejo a coisa:<br>
No passo-3 a gente tem:&nbsp; and [seguido de um espa&ccedil;o] \w+ [outro espa&ccedil;o]
\g{last_name}<br>
Neste \w+ n&atilde;o estaria compreendido TODOS os caracteres que v&atilde;o do
espa&ccedil;o ap&oacute;s o "and" at&eacute; o espa&ccedil;o last_name, ou seja, <br>
\w+ = [espa&ccedil;o]Wilma[espa&ccedil;o]Silva[espa&ccedil;o]\g{last_name}; onde
\g{last_name} = Flintstone<br>
<br>
Eu acho ent&atilde;o que t&ocirc; confundindo o "\w+"<br>
<br>
Vc pode me explicar novamente ?<br>
<br>
<br>
Gabriel Vieira escreveu:
<blockquote
 cite="mid:u2i83d8367f1004251026j5bff5cf9s605e4ed04fc10327@mail.gmail.com"
 type="cite">
  <pre wrap="">2010/4/25 "Fl&aacute;vio R. Lopes" <a class="moz-txt-link-rfc2396E" href="mailto:flavio.lopes@links.inf.br">&lt;flavio.lopes@links.inf.br&gt;</a>:
  </pre>
  <blockquote type="cite">
    <pre wrap="">use 5.010;
my $names = 'Fred Flinstone and Wilma Flinstone';
if( $names =~ m/(?&lt;last_name&gt;\w+) and \w+ \g{last_name}/ ) {
&nbsp; say "I saw $+{last_name}";
&nbsp; }
    </pre>
  </blockquote>
  <pre wrap=""><!---->

No caso, se vc perceber na regex que voc&ecirc; postou &eacute; identificado:

1) (?&lt;last_name&gt;\w+) -&gt; um conjunto de um ou mais caracteres
alfanum&eacute;ricos (ou _) e atribuido o seu valor &agrave; vari&aacute;vel $last_name
2) and -&gt; seguido de 1 espa&ccedil;o, a palavra 'and' e mais 1 espa&ccedil;o
3) \w+ -&gt; seguido de mais um conjunto de caracteres alfanum&eacute;ricos (ou
_), seguido de espa&ccedil;o
4) \g{last_name} -&gt; seguido posteriormente pelo mesmo conte&uacute;do
atribuido &agrave; vari&aacute;vel anteriormente.

O que ocorre, &eacute; que quando voc&ecirc; adiciona Silva, voc&ecirc; quebra essa
sequ&ecirc;ncia, j&aacute; que ap&oacute;s o conjunto de caracteres encontrado no passo 3,
voc&ecirc; ter&aacute; outro conjunto de caracteres (Silva), ao inv&eacute;s de Flinstone,
novamente, como encontrado no passo 1.

Para satisfazer, diremos que podem ser encontrados 0 ou mais conjuntos
de caracteres, antes do padr&atilde;o encontrado no passo 1 se repita.

--------------8&lt;--------------
use 5.010;
my $names = 'Fred Flinstone and Wilma Silva Flinstone';
if( $names =~ m/(?&lt;last_name&gt;\w+) and (\w+\s+)*\g{last_name}/ ) {
  say "I saw $+{last_name}";
}
--------------&gt;8--------------

Que eu j&aacute; indicaria, algo que possa satisfazer 2 sobrenomes iguais.

--------------8&lt;--------------
use 5.010;
my $names = 'Fred Silva Flinstone and Wilma Silva Flinstone';
if( $names =~ m/(?&lt;last_name&gt;(\w+\s*)+) and (\w+\s+)*\g{last_name}/ ) {
  say "I saw $+{last_name}";
}
--------------&gt;8--------------


[]s,

  </pre>
</blockquote>
<br>
</body>
</html>