.NET - Usando Expressões Regulares II


O meu artigo .NET  2005  - A plataforma .NET e as expressões regulares   foi uma introdução às expressões regulares na plataforma .NET onde você aprendeu  como usar este recurso no VB 2005. Continuando o assunto vou apresentar algumas dicas de como e onde você pode encontrar os padrões Regex mais usados.

Antes de continuar cabe aqui uma explicação sobre a origem do nome expressões regulares ou "regular sets" em inglês: Sua origem vem da teoria do funcionamento dos neurônios e da matemática quando foram descritos algebricamente estes modelos.

"Mas o encontro com o computador, só aconteceu mesmo em 1968, em um algoritmo de busca utilizado no editor de textos qed, que depois virou o ed, EDitor padrão dos primeiros sistemas Unix. Este ed tinha o comando de contexto g, que aceitava expressões regulares e um comando p, e sua sintaxe ficava g/RE/p ("Global Regular Expression Print"), que deu origem ao aplicativo grep, que por sua vez originou o egrep. ". Aurélio Marinho Jargas - http://aurelio.net/er

As expressões regulares se tornaram populares anos 70, devido a uma ferramenta UNIX chamada grep. Esta ferramenta podia efetuar pesquisas através de arquivos e pastas, com o uso de uma expressão regular, e exibir os resultados. A linguagem Perl também contribuiu muito para sua popularização visto que a Perl esta disponível em diversas plataformas inclusive o Windows e usa a mesma sintaxe das expressões regulares da ferramenta grep do UNIX.

Vou começar apresentando uma tabela onde temos algumas expressões regulares e sua forma de atuação:

xpressão Regular Satisfaz Não satisfaz  
palavra palavra Palavra, palavras Maiúsculas e minúsculas são relevantes
.ato gato,pato,mato prato Um ponto representa qualquer caractere
zebras? zebra,zebras zebrar Um ponto de interrogação indica que o caractere anterior é facultativo
aa* a,aa,aaa ab,az,aaaargh Um asterisco representa o caractere anterior zero ou mais vezes
aa+ aa,aaa a O sinal '+' representa o caractere anterior uma ou mais vezes
(bla)+ bla,blabla blabl Parêntesis podem ser usados para agrupar caracteres
pato|ganso pato,ganso cisne A barra vertical representa 'ou'.
[Zz]ebra Zebra,zebra febra Parênteses retos representam qualquer caractere dentro dos parênteses
A[3-5] A3,A4,A5 A1,A2,A6 Pode-se usar '-' para representar todos os caracteres num intervalo
\d+ 2,45,76 a,a9 \d representa qualquer algarismo
\w+9 a9 Mig29 \w representa qualquer letra
\D\W a9 9a,aa,99 \D representa não-dígito, \W representa não-letra
\? ? .,a,cebola Certos caracteres (.,?,parênteses) devem ser precedidos da barra invertida
\w{5,5} cinco,treze quatro,seis Palavras com cinco letras
\d{2,3}[50] 450,1755 45,4372,12450 Múltiplos de cinco entre 100 e 9995
guarda-(roupa|chuva) guarda-roupa,guarda-chuva guarda-rios Para agrupar duas ou mais alternativas, podem ser usados parênteses

Vamos continuar apresentando uma tabela contendo os padrões para as expressões regulares que podem ser úteis no seu dia a dia:

Seqüência Descrição
[+-]?\d+ Um número inteiro positivo ou negativo cujo sinal é opcional.
\d+ Número Positivo
[+-]?\d+(\.\d+)? Um número ponto flutuante cujo sinal e parte decimal é opcional.
[+-]?\d+(\.\d+)?(E[+-]?\d+)?

 

Um número ponto flutuante que pode ser expresso no formato exponencial.(Ex: 1.23E+12); O sinal da mantissa e o sinal do expoente são opcionais.
[0-9A-Fa-f]+ Um número hexadecimal
\w+ Uma seqüência de caracteres alfanuméricos e sublinhados; o mesmo que [A–Za–z0–9_]+
[A–Z]+ Uma palavra em caixa alta.
[A–Z][a–z]+ Um nome próprio (a letra inicial em caixa alta e as demais em caixa baixa).
[A–Z][A–Za–z']+ Sobrenome (O caractere inicial em caixa alta e a string pode conter outros caracteres me caixa alta e apostrofe, Ex: O'Brian).
[A–Za–z]{1,10} Uma palavra com dez caracteres ou menos.
[A–Za–z]{11,} Uma palavra com 11 caracteres ou mais.
(30|31|2\d|1\d|0?[1–9])(?<sep>[-/])(10|11|12|0?[1–9])\<sep>(\d{4}|\d{2}) Uma data no formato dd-mm-yyyy ou dd/mm/yyyy.
(2[0–3]|[01]\d|\d):[0–5]\d Um valor para hora no formato hh:mm;
\(\d{2}\)–\d{3}–\d{4} Um número de telefone. Ex: (11)-456-7890.
\d{8}(-\d{4})? Código Postal
((\d{16}|\d{4}(-\d{4}){3})|(\d{4}(\d{4}){3})) Um número de cartão de crédito com 16 dígitos que pode possuir opcionalmente traços e espaços para definir 4 grupos de dígitos.Ex: 1234567812345678, 1234-5678-1234-5678, or 1234 5678 1234 5678.
([0–9A–Fa–f]{32}|[0–9A–Fa–f]{8}-([0–9A–Fa–f]{4}-){3}[0–9A–Fa–f]{12}) Um número de 32-d~dígitos, com ou sem traços.
([A–Za–z]:)?\\?([^/:*?<>"|\\]+\\)*[^/:*?<>"|\\]+ Um nome de arquivo Windows , com ou sem o nome do drive ou diretório.
(http|https)://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)? Uma URL da internet;.
\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* Um endereço de e-mail;
((25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)\.){3}(25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d) Um número de IP em quatro partes, como 192.168.0.1;
^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])\w{8,}$ Uma senha com no mínimo 8 caracteres alfanuméricos que contém no mínimo um digito; um em caractere caixa baixa, e um caractere caixa alta. Para permitir símbolos substitua o termo \w por [0-9A-Za-z@.]

Veja a seguir onde você pode encontrar mais detalhes sobre expressões regulares :

Neste artigo procurei chamar a sua atenção para este importante assunto que são as expressões regulares e mostrar algumas ferramentas que nos ajudam a trabalhar com as Regex.

Com certeza voltarei a este assunto em outro artigo. Até lá...

referências:


José Carlos Macoratti