[SP-pm] Expressões Regulares

Khaoz giulianisanches at gmail.com
Mon Apr 26 08:50:43 PDT 2010


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/


More information about the SaoPaulo-pm mailing list