.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 [AZaz09_]+ |
[AZ]+ | Uma palavra em caixa alta. |
[AZ][az]+ | Um nome próprio (a letra inicial em caixa alta e as demais em caixa baixa). |
[AZ][AZaz']+ | Sobrenome (O caractere inicial em caixa alta e a string pode conter outros caracteres me caixa alta e apostrofe, Ex: O'Brian). |
[AZaz]{1,10} | Uma palavra com dez caracteres ou menos. |
[AZaz]{11,} | Uma palavra com 11 caracteres ou mais. |
(30|31|2\d|1\d|0?[19])(?<sep>[-/])(10|11|12|0?[19])\<sep>(\d{4}|\d{2}) | Uma data no formato dd-mm-yyyy ou dd/mm/yyyy. |
(2[03]|[01]\d|\d):[05]\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. |
([09AFaf]{32}|[09AFaf]{8}-([09AFaf]{4}-){3}[09AFaf]{12}) | Um número de 32-d~dígitos, com ou sem traços. |
([AZaz]:)?\\?([^/:*?<>"|\\]+\\)*[^/:*?<>"|\\]+ | 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 :
- Será aberta a janela - Regular Expression Editor - onde você poderá selecionar uma expressão regular já definida e obter o seu valor:
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: