[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