O Poder das Expressões Regulares
Igor Escobar on Fev 19th 2008
Hoje vou falar sobre um assunto que é de suma importância para qualquer programador , expressões regulares. O poder e a facilidade que é proporcionada aos programadores adeptos deste conceito são realmente enormes.
Para quem ainda não faz idéia do que eu estou falando vou mostrar um exemplo para vocês:
Estão vendo este grupo de caracteres aparamente mente misturados e sem lógica alguma, certo?
Errado! claro que tem lógica!
A história das expressões regulares começou no ano de 1943 e só foi apresentada ao computador 25 anos depois em 1968 em um algoritmo de busca integrado no editor de textos, na época chamado "qed".
Os pais das expressões regulares foram dois neurologistas que na época publicaram um estudo que teorizava o funcionamento dos nossos neurônios. Alguns anos depois um matemático (não me pergunte quem) descreveu algebricamente os modelos deste estudo usando símbolos que por sua vez foram chamados de grupos-regulares (regular sets) e baseado nestas notações simbólicas foi que deu origem as expressões regulares.
Como puderam notar, as expressões regulares são muito antigas e vem sendo muito utilizado para criar implementações "farejadoras", o uso das expressões regulares nada mais é do que implementar regras de coletação e verificação de sintaxe de textos.
O exemplo que eu dei para verificação do e-mail de um visitante é bem claro em relação a isso, ele verifica se o e-mail digitado pelo visitante possui uma sintaxe válida.
Para o seu estudo e compreendimento existe um e-book publicado pelo Aurélio Marinho Jargas na internet que foi aonde eu aprendi tudo que sei no que se trata de expressões regulares.
Facilitando o Estudo
Na internet existe várias ferramentas que te ajudam na fixação e treinamento dos conceitos aprendidos neste livro, uma destas, é o Regex Tester online, você escreve um texto simples, escreve a regra e o editor vai colorindo as áreas afetadas por sua expressão regular no seu texto.
Guia de Links Uteis
- Expressões regulares, por Guido Socher
- Trabalho de FMA 215 - Expressões Regulares, por Sergio Scarano Jr
- Expressões Regulares e Gramáticas Regulares, por Prof. A M Palazzo
- Expressões Regulares e Linguagens Regulares, por Profa. Rosália Rodrigues
- Expressões Regulares - Apresentação em Slides, por joão Lyma.
Expressões Regulares - Aplicando
- Expressões Regulares na Linguagem C, por Thobias Salazar Trevisan
- Expressões Regulares em C - Linux Gazette, traduzido por Fabio Utzig
- Documentação online sobre Expressões Regulares em Perl, por Iuri Gomes Diniz
- Expressões Regulares em Java - java.util.regex, por Paulo Silveira
- Expressões Regulares com Java, por Lucas de Castro
- PHP - Validação e exibição de CEPs, por Klaus Roberto de Paiva
- PHP - Utilizando regex para validação de compos de formulários, por Erika Focke
- Expressões Regulares em PHP #1
- Expressões Regulares em PHP #2, por Roberto Bertó
- Validação de Formulários HTML com Java Script, por Márcio d'Ávila
- JavaScript - Expressões Regulares, por Manoel M. Alves S. Jr
- Expressões Regulares em JavaScript, por Felipe
- Expressões Regulares no Ruby, por Lucas Húngaro
Nos links acima você encontra informações suficientes para em pouco tempo sair criando suas próprias expressões.
Concluindo
Insisto para que se você ainda não sabe criar suas expressões regulares, por favor, leia o e-book que apresentei a vocês, vocês não fazem idéia do quanto as expressões regulares podem facilitar a vida de um programador. Recentemente na empresa na qual trabalho um programador criou uma rotina que tinha aproximadamente 15 linhas de código, vários parsers, loops e funções desnecessárias somente para verificar se o campo foi preenchido com 12 números 1, 2, 3, 4, 5, 6, 7, 8, 9, 0. ou seja, ele criou uma rotina que varria o campo cpf e verificava se os 12 números digitados eram repetidos por ex: 111111111111, 222222222222 ... 999999999999.
De 12-15 linhas implementadas em JavaScript a solução Regex foi:
-
var Expressao = /([0]{12}|[1]{12}|[2]{12}|[3]{12}|[4]{12}|[5]{12}|[6]{12}|[7]{12}|[8]{12}|[9]{12}|)/
-
if(campoCpf.test(Expressao)) return false;
Viu? Poupa tempo e neurônios. Uma implementação de 12-15 linhas virar apenas duas.
Objetivo deste post não é ensina-los Expressões regulares e sim tentar mostrar para vocês a importância da aprendizagem do mesmo para tornar você um desenvolvedor muito mais produtivo.
Espero ter contribuído!
[]'s
Filed in Expressões Regulares, Java Script, PHP, Ruby on Rails | 7 responses so far
Tulio Vargas Fev 19th 2008 at 05:54 pm 1
Ola Igor, tudo bem ne ?!
Concerteza esse lance das expressoes regulares e de extrama importacia para um programador.
Gostei do POST !
abraco e sucesso.
[]’s
JulioGreff Fev 20th 2008 at 08:38 pm 2
Tô precisando aprender esse tipo de coisa… Ajuda um bocado, em qualquer situação que se mexa com strings
Igor Escobar Fev 20th 2008 at 08:54 pm 3
Com certeza!
Aqui no blog existe duas implementações para se trabalhar com mascaras em JavaScript.
A do primeiro post não usa RegExp a segunda usa Regexp veja com facilita a implementação e a manipulação a logica de uma das duas mudou e simplificou muito!
Julio Fev 22nd 2008 at 10:39 am 4
A separação de expressão regular é sem vírgula, por exemplo, você colocou assim:
([0-9,a-z,A-Z]+)…
Isso estaria errado. O certo seria:
([0-9a-zA-Z]+)…
Vlw
Igor Escobar Fev 22nd 2008 at 10:59 am 5
Não esta errado não Júlio.
Lembre-se, Dentro das listas [...] Todo mundo é normal. Ninguém é encarado como um meta caractere e não importa a ordem na qual ele é declarado.
Pegue a expressão passada neste post e teste no RegexPal (www.regexpal.com) depois digite um endereço de e-mail qualquer. Vai ver que vai casar normalmente.
Abraços.
Julio Fev 24th 2008 at 07:17 am 6
Ele casa, mas adicionar a ,(vírgula) como um caractere também. Testa essa email aqui:
teste,aa@test.com,
Observe que o email é inválido, pois possui um vírgula.
Agora, se você utilizar ([0-9A-Za-z]) não vai casar com a vírgula.
Vlw
Igor Escobar Fev 24th 2008 at 09:45 pm 7
Ah! sim!
Agora entendi o que você disse no primeiro comentário.
Mais tranquilo, era só para exemplificar e mostrar o que é uma expressão regular e não mostrar como se valida um e-mail etc.
Mas tranquilo, já editei, vlw.