Workshop "Expressões Regulares"
Por: Monday 18 September 2006 às 1:35 PM
Foi me dada a oportunidade de desenvolver um Workshop para os colaboradores da área de tecnologia da Webroom com o tema Expressões Regulares.
Neste artigo vou explicar alguns detalhes da apresentação, que pode ser conferida no link Apresentação de Expressões Regulares, para aqueles que desejam aprofundar mais no assunto, indico a leitura do livro Guia de Expressões Regulares.
A introdução fala por si só, então vou iniciar minhas considerações pelos metacaracteres, que são os caracteres especiais utilizados para se construir Expressões Regulares, eles podem ser divididos em representantes, quantificadores, âncoras, e outros.
Representantes, são utilizados para representar um ou mais caracteres.
. (ponto) => Substitui letras, números, caracteres especias, ou seja, qualquer caracter.
[] (lista) => Lista de caracteres permitidos, ou seja, serão considerados expressamente os caracteres que estão entre os colchetes.
[^] (lista negada) => Lista de caracters não permitidos, ou seja, serão considerados todos os caracteres, exceto os que estão entre os colchetes.
Quantificadores, são utilizados para quantificar o número de repetições permitidas para a entidade imediatamente anterior.
? (opcional) => A entidade anterior pode aparecer nenhuma ou uma vez.
* (asterisco) => A entidade anterior pode aparecer nenhuma, uma ou então mais de uma vez.
+ (mais) => A entidade anterior pode aparecer uma ou mais vezes.
{n,m} (chaves) => A entidade anterior aparece de n até m vezes
Âncoras, são utilizados para marcar uma posição específica na linha.
^ (circunflexo) => Marca o início da linha.
$ (cifrão) => Marca o final da linha.
\b (borda) => Marca o início ou fim de uma palavra, ou seja, as bordas da palavra.
Outros, são classificados como outros, pois não possuem funções específicas, logo não podem ser agrupadas.
\c (escape) => Torna literal o caractere c, ou seja, se utilizarmos \. estamos nos referindo ao sinal de pontuação, e não há um caracter qualquer.
| (ou) => Serve como escolha, ou seja, ou uma coisa ou outra.
() (grupo) => Serve para delimitarmos grupos, na apresentação dos exemplos o entendimento ficará mais fácil.
\1…\9 (retrovisor) => Referencia os textos casados dentro do grupo, da mesma forma, entenderemos melhor com os exemplos.
Agora vamos à melhor parte, que são os exemplos, pois tenho certeza que ficará muito mais fácil entendermos todos estes caracteres, e como unirmos estes para montar uma Expressão Regular.
O primeiro exemplo, mostra os passos que podem ser dados para montar uma Expressão Regular, ou seja, começamos bem genéricos e vamos limitando as possibilidades, como podemos ver, a primeira tentativa seria deixarmos n.o, que resolve nosso problema, pois encontra a palavra não escrita com ou sem acento, mas como ela é genérica ela traz palavras que não queríamos, como neo, anão e outras, sendo assim temos que melhorar nossa expressão, tentamos colocar n[ãa]o, mais específica ela continua funcionando para encontrar a palavra não com ou sem acento, mas ainda traz algumas palavras não desejadas, tentando ser mais específicos podemos tentar \bn[ãa]o\b, agora sim, esta expressão nos traz apenas a palavra não com e sem acento, mas podemos ainda construir uma Expressão Regular ainda mais específica que nos trará todas as variações da palavra não, ou seja, trazendo também quando escrevemos em caixa alta, tendo como resultado \b[Nn][ÃãAa][Oo]\b, que encontrará qualquer variação da palavra não. Vale lembrar que é melhor não ignorarmos o case sensitive, ou seja, caracteres em minúsculo e maiúsculo, e muito menos deixar para o sistema diferenciar estes caracteres.
O segundo exemplo é bem semelhante a este, pois partimos de uma expressão simples e genérica para uma mais completa, então não vou explicar passo a passo, mas se alguém tiver dúvida, basta perguntar
.
O terceiro, o quarto e o quinto exemplos ilustram bem a utilização dos metacaracteres do tipo âncoras, o terceiro exemplo é utilizado para buscarmos caracteres específicos no início de uma linha, ou então no final, o quarto exemplo é uma boa dica para encontrarmos e até mesmo excluirmos linhas vazias de um arquivo e o quinto exemplo serve para auxiliar a um texto onde os parágrafos devem ter entre 20 e 60 caracteres.
O sexto e o sétimo exemplos ilustram bem a utlização do | (ou), e ainda no sétimo exemplo notamos a utilização do ? (opcional), que faz com que a entidade anterior apareça nenhuma, ou então uma vez, vamos analisar com mais calma a expressão (mini|(su|hi)per)?mercado. Começando pelo opcional, sabemos que esta expressão casa com mercado, pois toda esta parte (mini|(su|hi)per) pode não aparecer, caso apareça (apenas uma vez, pois estamos utilizando o ?, não se esqueça) poderemos ter um minimercado, ou então um (su|hi)permercado que pode ser lido como um supermercado ou um hipermercado, ou seja, com a expressão (mini|(su|hi)per)?mercado, podemos encotrar, mercado, minimercado, supermercado e hipermercado.
O oitavo, nono, décimo e décimo primeiro exemplos, mostram bem a utilização dos grupos e retrovisores, no oitavo exemplo temos, (lenta)(mente) é \2 \1, neste exemplo é fácil identificar quem é o primeiro retrovisor (lenta) e quem é o segundo (mente), casando então com a frase, lentamente é mente lenta, já no décimo primeiro exemplo, ((((a)b)c)d)-1 = \1,\2,\3,\4, esta diferenciação não é tão fácil assim, então para facilitar vamos por partes, como definição podemos dizer que o primeiro retrovisor se inicia no primeiro grupo, ou seja, no primeiro parêntese, e termina com o término deste grupo, e assim por diante, seguindo estes passos temos que o primeiro retrovisor é a expressão, (((a)b)c)d, ou ainda a palavra, abcd, já o segundo retrovisor, é ((a)b)c, ou ainda, abc, o terceiro é, (a)b, ou ab e o quarto retrovisor é, (a), ou ainda apenas a, então a expressão, ((((a)b)c)d)-1 = \1,\2,\3,\4, irá casar com o texto abcd-1 = abcd,abc,ab,a, simples não?
Como o intuito deste artigo foi apresentar de forma simples e rápida alguns detalhes da Apresentação de Expressões Regulares que apresentei aos colaboradores do departamento de tecnologia da Webroom e também das Expressões Regulares, vou terminando por aqui, lembrando aqueles que querem aprender mais sobre o assunto, leiam o livro Guia de Expressões Regulares.
Para aqueles que estão se aventurando no mundo das Expressões Regulares, recomento um excelente programa para testar suas Expressões Regulares, o programa é o Expresso.
Espero que tenham gostado e qualquer dúvida estou aqui para tentar resolver.
Artigos relacionados:
Tags: Dicas Expressões Regulares JavaScript Tecnologia Tutorial















# 1° Ciro Feitosa September 19th, 2006 às 9:30 PM GMT
Parabéns pelo artigo Flávio. Didático e bem explicado. Só senti falta de mais artigos (eita leitor exigente hein?!). Já foi pro Del.icio.us. Abraço!