<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
Heheheh!....obrigado Solli<br>
<br>
Não tenho medo não das regex....mas é que tudo que é novo e diferente
(e põe diferente nisso!) as vezes dá um pouco de receio, ou melhor, a
gente não consegue enxergar direito a coisa. Mas é aquela
história....só se aprende a andar de bicicleta andando nela!<br>
<br>
Abraço e obrigado pelo apoio,<br>
<br>
Flávio<br>
<br>
Solli Honorio escreveu:
<blockquote
cite="mid:j2t12d1f4ee1004260236sdd2e6362k3a17094f8bf0d57c@mail.gmail.com"
type="cite"><span style="font-family: courier new,monospace;">Flávio
bem vindo ao clube dos que tomaram, tomam e vão tomar cacete de regex.</span><br
style="font-family: courier new,monospace;">
<br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">Neste momento você
está passando pela fase 1 na escala de desenvolvedores Perl, que é
quando você começa aprender regex e acha que tudo poderá ser feito em
regex, inclusive querendo substituir 'eq' por '=~ //i'. Mas felizmente
você está percebendo rápido que regex é um padrão muito rígido, e
relativamente fácil de ser 'quebrado'.<br>
<br>
Dois exemplos simples de como quebrar regex é tentar utilizá-la para
verificar email e ou fazer parse de html. Como o Eden já disse uma vez:
"a regex (expressão regular) não pode ser utilizada para processar algo
que não é regular", compreender esta frase é muito importante,
compreender o que é 'regular' é imprescindível.<br>
<br>
O Gabriel e o Mantovani já lhe deram boas orientações, e aqui só quero
complementar. Continue lendo o material que você está lendo, considere
obter o 'Mastering Regular Expression' e dê uma olhada no site <a
moz-do-not-send="true" href="http://www.regular-expressions.info/">http://www.regular-expressions.info/</a>.<br>
<br>
Abraços e bem vindo ao clube !<br>
<br>
Solli M. Honório<br>
</span><br style="font-family: courier new,monospace;">
<br>
<div class="gmail_quote">2010/4/25 "Flávio R. Lopes" <span dir="ltr"><<a
moz-do-not-send="true" href="mailto:flavio.lopes@links.inf.br">flavio.lopes@links.inf.br</a>></span><br>
<blockquote class="gmail_quote"
style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div bgcolor="#ffffff" text="#000000">
Oi Gabriel!<br>
<br>
Nossa cara!...tô tomando um cacete de regex!<br>
<br>
Putz....num fica bravo, mas não entendi direito sua explicação.<br>
<br>
Na parte em que vc se diz que eu "quebrei a sequencia" ao inserir
'Silva' não estaria mantendo o mesmo padrão, ou seja, o proximo \w+ (do
passo 3) ainda não estaria no mesmo padrão? pois ainda assim teríamos o
"and" seguinte de um espaço até a palavra "Flintstone"<br>
<br>
Deixa ver se te explico melhor como vejo a coisa:<br>
No passo-3 a gente tem: and [seguido de um espaço] \w+ [outro espaço]
\g{last_name}<br>
Neste \w+ não estaria compreendido TODOS os caracteres que vão do
espaço após o "and" até o espaço last_name, ou seja, <br>
\w+ = [espaço]Wilma[espaço]Silva[espaço]\g{last_name}; onde
\g{last_name} = Flintstone<br>
<br>
Eu acho então que tô confundindo o "\w+"<br>
<br>
Vc pode me explicar novamente ?<br>
<br>
<br>
Gabriel Vieira escreveu:
<div>
<div class="h5">
<blockquote type="cite">
<pre>2010/4/25 "Flávio R. Lopes" <a moz-do-not-send="true"
href="mailto:flavio.lopes@links.inf.br" target="_blank"><flavio.lopes@links.inf.br></a>:
</pre>
<blockquote type="cite">
<pre>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}";
}
</pre>
</blockquote>
<pre>No caso, se vc perceber na regex que você postou é identificado:
1) (?<last_name>\w+) -> um conjunto de um ou mais caracteres
alfanuméricos (ou _) e atribuido o seu valor à variável $last_name
2) and -> seguido de 1 espaço, a palavra 'and' e mais 1 espaço
3) \w+ -> seguido de mais um conjunto de caracteres alfanuméricos (ou
_), seguido de espaço
4) \g{last_name} -> seguido posteriormente pelo mesmo conteúdo
atribuido à variável anteriormente.
O que ocorre, é que quando você adiciona Silva, você quebra essa
sequência, já que após o conjunto de caracteres encontrado no passo 3,
você terá outro conjunto de caracteres (Silva), ao invé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ão encontrado no passo 1 se repita.
--------------8<--------------
use 5.010;
my $names = 'Fred Flinstone and Wilma Silva Flinstone';
if( $names =~ m/(?<last_name>\w+) and (\w+\s+)*\g{last_name}/ ) {
say "I saw $+{last_name}";
}
-------------->8--------------
Que eu já indicaria, algo que possa satisfazer 2 sobrenomes iguais.
--------------8<--------------
use 5.010;
my $names = 'Fred Silva Flinstone and Wilma Silva Flinstone';
if( $names =~ m/(?<last_name>(\w+\s*)+) and (\w+\s+)*\g{last_name}/ ) {
say "I saw $+{last_name}";
}
-------------->8--------------
[]s,
</pre>
</blockquote>
<br>
</div>
</div>
</div>
<br>
_______________________________________________<br>
SaoPaulo-pm mailing list<br>
<a moz-do-not-send="true" href="mailto:SaoPaulo-pm@pm.org">SaoPaulo-pm@pm.org</a><br>
<a moz-do-not-send="true"
href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a><br>
</blockquote>
</div>
<br>
<br clear="all">
<br>
-- <br>
"o animal satisfeito dorme". - Guimarães Rosa<br>
<pre wrap="">
<hr size="4" width="90%">
_______________________________________________
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>
<br>
</body>
</html>