[Cascavel-pm] Dúvida_sobre_expressão_regular

Alceu R. de Freitas Jr. glasswalk3r em yahoo.com.br
Quinta Outubro 23 16:09:56 CDT 2003


Só para complementar, o guia de expressões regulares
do Aurélio é muito bom!

http://guia-er.sourceforge.net/guia-er.html

Ele apresenta as expressões regulares de uma forma que
você não fica com medo de ter edemas cerebrais. ;-)

[]´s
Alceu


 --- Luis Campos de Carvalho <lechamps em terra.com.br>
escreveu: > Solli Moreira Honorio wrote:
> > Pessoal,
> > 
> > Estou estudando o livro 'Real World SQL Server
> Administration with Perl' 
> > do Linchi Shea - ed. Apress (_www.apress.com_ 
> >
>
<http://webmail.terra.com.br/xwebmail/cgi-bin/www.apress.com>),
> onde o 
> > autor usa e abusa das expressões regulares para
> monitorar e adminstrar o 
> > MS SQL.
> > 
> > Bom, pra mim expressões regulares são pra lá de
> abstratas em alguns 
> > casos, parecendo até mesmo uma outra linguaguem, e
> dentre estas 
> > encontrei uma expressão no livro que eu não
> entendi nadinha o que ela 
> > está fazendo e por isto eu gostaria de pedir ajuda
> aos monges.
> > 
> > O cara vai ler um arquivo com dados parecidos como
> "Index 
> > Scan(OBJECT:([pubs].[dbo].[jobs].[jobs_ix])" e aí
> o código faz a 
> > manipulação maluca abaixo.
> > 
> > if (m{^[\s | \d | \|]*\|\-\-
> > 
> > ( Clustered\s+Index\s+Seek |
> Clustered\s+Index\s+Scan |
> > 
> > Clustered\s+Index\s+Delete |
> Clustered\s+Index\s+Update |
> > 
> > Clustered\s+Index\s+Insert | Index\s+Seek |
> Index\s+Scan |
> > 
> > Index\s+Delete | Index\s+Update | Index\s+Insert |
> Table\s+Scan
> > 
> > )
> > 
> > \(OBJECT\:\(
> > 
> > (
> > 
> > (\[([^\]] | \]\])+\]) # database name
> > 
> > \.\[([^\]] | \]\])+\] # owner
> > 
> > \.\[([^\]] | \]\])+\] # object
> > 
> > (\.\[([^\]] | \]\])+\])? # index
> > 
> > )
> > 
> > \)
> > 
> > }ix)
> > 
> > A primeira coisa que eu não entendi é o 'm{}ix',
> que raio é isto ? É um 
> > match ? e depois o resto .... também fiquei
> boiando.
> > 
> 
>    Oi, Solli.
> 
>    Desculpe a demora... eu estou um pouco
> sobrecarregado.
> 
>    Sim, "m{...}xi" é um match, e um bem complicado.
> =-]
> 
>    Eu vou tentar reescrever o match sem usar a opção
> "/x", talvez fique 
> mais simples de você entender:
> 
>
m{^[\s|\d|\|]*\|\-\-(Clustered\s+Index\s+Seek|Clustered\s+Index\s+Scan|Clustered\s+Index\s+Delete|Clustered\s+Index\s+Update|Clustered\s+Index\s+Insert|Index\s+Seek|Index\s+Scan|Index\s+Delete|Index\s+Update|Index\s+Insert|Table\s+Scan)\(OBJECT\:\(((\[([^\]]|\]\])+\])\.\[([^\]]|\]\])+\]\.\[([^\]]|\]\])+\](\.\[([^\]]|\]\])+\])?)\)}i
> 
>    Como você pode notar, este é um Match BEM
> comprido.
> 
>    A opção "/x" serve para 'eXtender' as expressões
> regulares para que 
> ela aceite e ignore espaços em branco não-quotados e
> comentários no 
> estilo do perl (de "#" até o final da linha). Isso
> permite que a 
> expressão regular fique mais legível e
> conseqüêntemente mais simples de 
> manter.
> 
>    Agora, quanto às chaves ("{" e "}"), que
> delimitam a expressão:
> 
>    Uma expressão regular pode ser delimitada por
> "/", ou por qualquer 
> outro caracter que você deseje, desde que você
> indique claramente ao 
> Perl que o que segue é uma expressão regular, usando
> para isso o 
> operador "m" (de "match").
> 
>    Assim, escrever
> 
>    $thing =~ /thing/;
> 
>    ou
> 
>    $thing =~ m,thing,;
> 
>    ou
> 
>    $thing =~ m;thing;;
> 
>    é exatamente a mesma coisa...
> 
>    Espero que isso ajude você a entender a sua
> expressão...
>    []'z!
> -- 
> =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
>    Luis Campos de Carvalho is Computer Scientist,
>    PerlMonk [SiteDocClan], Cascavel-pm Moderator,
>    Unix Sys Admin && Certified Oracle DBA
>    http://br.geocities.com/monsieur_champs/
> =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
> 
> _______________________________________________
> Cascavel-pm mailing list
> Cascavel-pm em mail.pm.org
> http://cascavel.pm.org/mailman/listinfo/cascavel-pm 

Yahoo! Mail - o melhor webmail do Brasil
http://mail.yahoo.com.br



Mais detalhes sobre a lista de discussão Cascavel-pm