[SP-pm] Expressões Regulares

Khaoz giulianisanches at gmail.com
Mon Apr 26 08:51:30 PDT 2010


Em 26 de abril de 2010 12:50, Khaoz <giulianisanches at gmail.com> escreveu:
> 2010/4/26 "Flávio R. Lopes" <flavio.lopes at links.inf.br>:
>> Heheheh!....obrigado Solli
>>
>> 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!
>>
>> Abraço e obrigado pelo apoio,
>>
>> Flávio
>>
>> Solli Honorio escreveu:
>>
>> Flávio bem vindo ao clube dos que tomaram, tomam e vão tomar cacete de
>> regex.
>>
>> 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'.
>>
>> 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.
>>
>> 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
>> http://www.regular-expressions.info/.
>>
>> Abraços e bem vindo ao clube !
>>
>> Solli M. Honório
>>
>>
>> 2010/4/25 "Flávio R. Lopes" <flavio.lopes at links.inf.br>
>>>
>>> Oi Gabriel!
>>>
>>> Nossa cara!...tô tomando um cacete de regex!
>>>
>>> Putz....num fica bravo, mas não entendi direito sua explicação.
>>>
>>> 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"
>>>
>>> Deixa ver se te explico melhor como vejo a coisa:
>>> No passo-3 a gente tem:  and [seguido de um espaço] \w+ [outro espaço]
>>> \g{last_name}
>>> 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,
>>> \w+ = [espaço]Wilma[espaço]Silva[espaço]\g{last_name}; onde \g{last_name}
>>> = Flintstone
>>>
>>> Eu acho então que tô confundindo o "\w+"
>>>
>>> Vc pode me explicar novamente ?
>>>
>>>
>>> Gabriel Vieira escreveu:
>>>
>>> 2010/4/25 "Flávio R. Lopes" <flavio.lopes at links.inf.br>:
>>>
>>>
>>> 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}";
>>>   }
>>>
>>>
>>> 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,
>>>
>>>
>>>
>>> _______________________________________________
>>> SaoPaulo-pm mailing list
>>> SaoPaulo-pm at pm.org
>>> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>>
>>
>>
>> --
>> "o animal satisfeito dorme". - Guimarães Rosa
>>
>> ________________________________
>> _______________________________________________
>> SaoPaulo-pm mailing list
>> SaoPaulo-pm at pm.org
>> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>>
>> _______________________________________________
>> SaoPaulo-pm mailing list
>> SaoPaulo-pm at pm.org
>> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>>
>
>
> Espero não estar repetindo alguma indicação, acabei não acompanhando a
> thread, mas tem o livro do Aurélio que ensina regex de maneira
> "light".
>
> []'s
>
> --
> Giuliani Sanches
> twitter.com/giulianisanches
> giulianisanches.blogspot.com
>
> Como elaborar uma pergunta:
> http://www.istf.com.br/perguntas/
>


Ops... link:

http://www.piazinho.com.br/

-- 
Giuliani Sanches
twitter.com/giulianisanches
giulianisanches.blogspot.com

Como elaborar uma pergunta:
http://www.istf.com.br/perguntas/


More information about the SaoPaulo-pm mailing list