Obrigado por visitar a devmedia.com.br!

Precisamos de você para divulgar nossos vídeos e cursos gratuitos para a comunidade.

Se você gosta da devmedia.com.br por favor dê-nos o seu clique para o Google+ e ajude outros desenvolvedores ao redor do mundo.



Obrigado por seu apoio!
Equipe DevMedia

sair sem compartilhar (x)
DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:

Iniciando Expressões Regulares

Apresenta as sintaxes básicas das Expressões Regulares e também a classe Regex.

Untitled Document

Expressões Regulares são padrões de caracteres que associam sequências de caracteres no texto. Podemos usar expressões regulares para extrair ou substituir porções de texto, bem como, endereço ou link de imagens em uma página HTML, modificar formato de texto ou remover caracteres inválidos.

Não podemos esquecer que a sintaxe de Expressões Regulares são case-sensitive, ou seja, "abc" é diferente de "ABC".

Neste artigo apresentaremos os métodos mais utilizados da classe Regex, trabalharemos as sintaxes de referência de expressões regulares mais utilizadas, seguida de práticas e validações úteis do dia-a-dia.

1. Regex

No .NET a classe Regex representa uma expressão regular imutável. Esta classe contém diversos métodos estáticos que nos permite trabalhar com expressões regulares. Para usarmos o objeto Regex devemos importar o namespace System.Text.RegularExpressions.

Segue relação de métodos mais utilizados da classe Regex, a saber:

Métodos Regex
Framework Descrição Modelo
Escape evita um conjunto de metacaracteres (\, *, +, ?, |, {, [, (,), ^, $,., #, e espaço em branco) substiuindo ele com seu código de escape Regex.Escape( input, pattern)
IsMatch indica se a expressão regular encontrar a entrada de string associada Regex.IsMatch( input, pattern)
Regex.IsMatch( input, pattern, options)
Match pesquisa uma entrada de string para uma ocorrência de uma expressão regular e retorna resultado preciso como um objeto Match único Regex.Match( input, pattern)
Regex.Match( input, pattern, options)
Matches pesquisa uma entrada de string para todas as ocorrências de uma expressão regular e retorna todos os resultados com sucesso, executa Match várias vezes Regex.Matches( input, pattern)
Regex.Matches( input, pattern, options)
Replace dentro de uma entrada de string especificada, substitui string que associa com expressão regular por outra especificada para reposição Regex.Replace( input, pattern, replacement)
Regex.Replace( input, pattern, replacement, options)
Split divide uma string em um array de substrings nas posições definidas pela expressão regular Regex.Split( input, pattern)
Regex.Split( input, pattern, options)
Unescape substitui código de escape pelo caractere de escape Regex.Unescape( input, pattern)

Opções de Execução
Framework Caractere Inline Descrição
None N/A nenhuma opção especificada
IgnoreCase i associa case-insensitive
Multiline m modo multi-linha; modifica o significado de ^ e $, assim ele executa associando o inicio e fim, respectivamente, de alguma linha
ExplicitCapture n somente capturas validas são explicitamente grupos nomeados ou numerados do formato (?<name>...)
SingleLine s modo linha simples; modifica o significado do caractere (.) assim ele associa todos caracteres (em lugar de cada caractere exceto \n)
IgnorePatternWhitespace x permite espaço em branco e comentários no pattern
Compiled N/A expressões regulares seriam compilados para um assembly
RightToLeft N/A procura mover da direita para esquerda em lugar da esquerda para direita
Global (não contém na framework) g pesquisa global para todas as ocorrências do padrão

Regex na Prática
Framework Exemplo
IsMatch Dim newBoolean1 As Boolean = Regex.IsMatch("Editora Wrox", "wrox")
Dim newBoolean2 As Boolean = Regex.IsMatch("Editora Wrox", "wrox", _
    RegexOptions.IgnoreCase)
Dim myRegex As New Regex("wrox", RegexOptions.IgnoreCase)
Dim newBoolean3 As Boolean = myRegex.IsMatch("Editora Wrox")

Obs.: newBoolean1 retorna 'False' por causa que não contém 'IgnoreCase' (confira Opções de Execução)
Match Dim newMatch1 As Match = Regex.Match("Editora Wrox", "wrox", RegexOptions.IgnoreCase)
Response.Write(newMatch1.Success)
Matches Dim newMatches As MatchCollection = Regex.Matches("Editora Wrox", "wrox", RegexOptions.IgnoreCase)
For Each myMatch As Match In newMatches
    Response.Write(myMatch.Value)
Next
Replace Dim newString1 As String = Regex.Replace("Editora Wrox", "wrox", "o'relly")
Dim newString2 As String = Regex.Replace("Editora Wrox", "wrox", "o'relly", _
    RegexOptions.IgnoreCase)
Dim myRegex As New Regex("wrox", RegexOptions.IgnoreCase)
Dim newString3 As String = myRegex.Replace("Editora Wrox", "o'relly")
Split Dim newString1() As String = Regex.Split("Editora Wrox", "wrox", RegexOptions.IgnoreCase)
For Each str As String In newString1
    Response.Write(str & "<br />")
Next

2. Referências

Segue uma breve descrição dos caracteres especiais mais utilizados em expressão regular.

Escape
Caractere Descrição
\ caractere de escape (usado para anular um efeito de um metacaractere; TOME CUIDADO AO UTILIZAR ESTE CARACTERE POIS "\d" REPRESENTA UM METACARACTERE DÍGITO E PARA ANULAR DEVE-SE ACRESCENTAR MAIS UM CARACTERE DE ESCAPE "\\d") .
\a alarm \u0007
\b veja âncora.
\t tab \u0009
\r retorno de carro \u000D
\v tab vertical \u000B
\f alimentação de formulário \u000C
\n nova linha \u000A
\e escape \u001B
\040 caractere ASCII como octal (3 dígitos). Por exemplo, um caractere \040 representa um espaço
\x20 caractere ASCII usando representação hexadecimal (3 dígitos)
\cC caractere ASCII de controle. Por exemplo, \cC é equivalente a Ctrl-C
\u0020 caractere ASCII usando representação hexadecimal (4 dígitos)

Agrupamento
Caractere Descrição
[] usado para indicar o conjunto de caracteres que podem conter no texto pesquisado.
(veja quantificadores)
[^] usado para indicar o conjunto de caracteres que NÃO podem conter na pesquisa.
(...) indica o início e o fim de um grupo;
ex.: /(abc)+(def)/ encontra um ou mais ocorrencias de "abc" seguido por uma ocorrencia de "def".
obs.: para usar o parêntese, literalmente, utilize o caractere de escape "\ (" ou "\ )", ou ainda, "[ ( ]" ou "[ ) ]"

Âncora
Caractere Descrição Modelo Representação Explicação
^ início da linha "^abc" "abcde" associa texto que inicia com a sequência "abc", embora não "yabc".
$ fim da linha "abc$" "yzabc" associa texto que termina com a sequência "abc", embora não "abcde".
\b fronteira do caractere "car\b" "car"; "tocar" associa a fronteira da palavra "car", embora não "carburador".
\B não fronteira do caractere "car\B" "carburetor" não associa a fronteira da palavra "car", mas pode assegurar que a sequência ocorra no meio da palavra, como "carburador", embora não "tocar".
\A início da string  "\Apattern"  "patterns"  --
\Z fim da string  "pattern\Z"  "topattern"  --

Quantificadores
Caractere Descrição Modelo Representação Explicação
* zero ou mais vezes "zo*" "z" ; "zoo" o caractere que precede o asterisco pode ser repetido 0 ou mais vezes (equivalente a "{0,}")
+ uma ou mais vezes "zo+" "zo" ; "zoo" o caractere que precede o sinal de (+) pode ocorrer 1 ou mais vezes (equivalente a "{1,}")
? zero ou uma vez "do(es)?" "do" ; "does" o caractere que precede o sinal de interrogação pode ocorrer 0 ou 1 vez (equivalente a "{0,1}")
{n} n vezes "o{2}" "food" o caractere que precede o sinal pode ocorrerá n vezes
{n,} pelo menos n vezes "o{2,}" "foooood" a sequência "{0,}" é equivalente a "o*"; a sequência "{1,}" é equivalente a "o+"
{n,m} no mínimo n e no máximo m "o{1,3}" "foooood" associa aos três primeiros "ooo"; é equivalente a "o?"
. um caractere simples, exceto "\n" "o." "oa" representa um carecteres simples, exceto "\n" ( para associá-lo utilize o padrão "[\s\S] " )
[xyz] um dos caracteres que está dentro dos colchetes "[abc]" "plain" associa "a" contido na palavra "plain"
[a–z] um dos caracteres que está dentro dos colchetes "[a–z]" --- associa um dos caracteres de 'a' até 'z' em caixa baixa, lembre-se que expressões regulares são case-sensitive

Alternador
Caractere Descrição Modelo Representação Explicação
"|" (pipe) uma ou outra ocorrência "(z|f)ood" "zood" ou "food" o caractere | (pipe) representa uma ocorrência ou outra

Classes
Classe Descrição
[:digit:] dígito; equivalente a [0-9]
[:alnum] letras e números ; equivalente a [A-Za-z0-9]
[:space:] caracteres brancos ; equivalente a [ \t\n\r\f\v]
[:alpha:] letras; equivalente a [A-Za-z]
[:lower:] minúsculas; equivalente a [a-z]
[:upper:] maiúsculas; equivalente a [A-Z]
[:punct:] caracteres de pontuação; equivalente a [.,!?:...]
[:xdigit:] números hexadecimais; equivalente a [0-9A-Fa-f]
[:word:] qualquer caractere alfanumérico, mais underscore (_); equivalente a [[:alnum:]_]
[:blank:] espaço em branco e TAB; equivalente a [\t]
[:punct:] pontuação; equivalente a [!"#$%&'()*+,-./:;?@[\\\]_`{|}~]

Caracteres de Classes Predefinidos
Classe Caractere
[:digit:] \d
^[:digit] \D
[:space:] \s
^[:space:] \S
[:word:] \w
^[:word:] \W

Parâmetros BackReference
Caracteres Descrição
\number backreference que associa o conteúdo do grupo de mesmo número. Grupos são numerados iniciando de 1. Por exemplo, (.+) \1 associa 'abc abc' ou '777 777', embora não 'abc def'. O número máximo de backreferences é limitado para 9 (\1...\9).
\k<name> backreference nomeada. (http://msdn2.microsoft.com/en-us/library/ksz2azbh.aspx)

Comentário
Caractere Descrição
# insere comentário dentro da expressão

3. Praticando

É interessante criarmos uma página .aspx (ou qualquer outra hosting application que desejar) para testarmos as expressões regulares. O código abaixo facilita bastante a execução das sintaxes, inclusive dos métodos da classe Regex (veja Métodos Regex).

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
    ' o padrão que utilizaremos será Regex.IsMatch( input, pattern)
    If (Regex.IsMatch(TextBox1.Text, "^\d+$")) Then
        Response.Write("Informação válida.")
    Else
        Response.Write("Informação inválida.")
    End If
End Sub

Perceba que o método IsMatch retorna um valor Booleano e é necessário informar, neste caso, apenas o texto e a sintaxe da expressão regular (veja Métodos Regex). Para qualquer teste que queira fazer basta colocar o pattern - sintaxe - da expressão regular e testar. Por exemplo, "^\d+$" valida somente dígitos, isso significa que se for digitado alguma coisa que não for número então retornará False. Abaixo segue uma lista de algumas das validações simples que utilizamos no dia a dia.

Validações Úteis com Expressões Regulares
Tipo de Validação Expressão
Dígito ^\d+$
Decimal ^[+-]?((\d+|\d{1,3}(\.\d{3})+)(\,\d*)?|\,\d+)$
^[-+]?([0-9]*\,[0-9]+|[0-9]+)$
Letra ^[[:alpha:]]+$
URL ^((http)|(https)|(ftp)):\/\/([\- \w]+\.)+\w{2,3}(\/ [%\-\w]+(\.\w{2,})?)*$
E-mail ^([\w\-]+\.)*[\w\- ]+@([\w\- ]+\.)+([\w\-]{2,3})$
Endereço IP \b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b
Tempo (24 horas) ^([0|1|2]{1}\d):([0|1|2|3|4|5]{1} \d)$
Data (dd/mm/aaaa) ^((0[1-9]|[12]\d)\/(0[1-9]|1[0-2])|30\/(0[13-9]|1[0-2])|31\/(0[13578]|1[02]))
\/\d{4}$
Telefone ^\(\d{3}\)-\d{4}-\d{4}$
Senha ^\w{4,10}$
^[a-zA-Z]\w{3,9}$
^[a-zA-Z]\w*\d+\w*$

3. Referências

- Microsoft Visual Basic .NET Programmer's Cookbook / by Matthew MacDonald;
- Sams Teach Yourself Regular Expressions in 10 Minutes / By Ben Forta;
- Mastering Regular Expressions, 3rd Edition / By Jeffrey E. F. Friedl;
- Beginning Regular Expressions / Andrew Watt;
- Microsoft .NET Framework 2.0 Application Development Foundation / byTony Northrup, Shawn WildermuthandBill Ryan.





    8 COMENTÁRIOS

[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.



Rodrigo Medeiros
E isso aí Kallebe, muito bom artigo... Parabéns !!


em 17/9/2007 14:31 - Responder

 

Cleiton Gomes
Não, estava falando sobre as tabelas backReference, Classes Predefinidas e Classes.


em 14/9/2007 18:28 - Responder

 

  Kallebe Lins
Dê uma olhada nas validações úteis, pois acho que contém o que vc quer com exceção de backReference. Por exemplo, substitua ^\d$ pela validação de letra...


em 17/9/2007 17:12 - Responder
 

Thiago Seronni
Mais uma grande contribuição para o DevMedia com certeza do nosso amigo Kallebe, abraços!


em 19/9/2007 18:59 - Responder

 

Cleiton Gomes
Só faltou você citar alguns exemplos com as informações que foram repassadas nas tabelas para qeu eu artigo ficasse perfeito :P


em 13/9/2007 12:45 - Responder

 

  Kallebe Lins
Verifique o exemplo inicial de criação da console application, bem como, Regex na prática. Perceba que o método IsMatch retorna um valor Booleano e é necessário informar, neste caso, apenas o texto e a sintaxe da expressão regular (veja Métodos Regex). Para qualquer teste que queira fazer basta colocar o pattern - sintaxe - da expressão regular e testar.


em 14/9/2007 09:10 - Responder
 

  Internautarv@gmail.com
Kallebe Lins, Boa tarde tem como pegar num texto assim "Mar, Marcos Maria , Mario" so pegar "Mar", mas somente em palavras inteiras , e nao pegar o Mar de Marcos por exemplo???


em 20/11/2007 15:52 - Responder
 

  Kallebe Lins
Sim. Utilize '\b' para definir a fronteira da palavra. Dê uma olhada na tabela 'Âncora' deste artigo.


em 21/11/2007 11:54 - Responder
 



[Este post ainda não foi associado a uma sequência]
Autor
Kallebe Lins

CONSULTOR .NET | ARQUITETO DE SOFTWARE | COORDENADOR DE PROJETOS .NET | Técnico em Sistemas Integrados de Gestão Empresarial | MCP Foundation | MCTS Web | MCTS Distributed | MCTS SQL SERVER 2005 | MCTS Windows Based | Microsoft Team Foundation Server 2010 | Microsoft Sharepoint 2010


Space do autor
Estatísticas
Favorito:
Comentários:
Feedback:
Utilidade:
2   1
[Fechar]

Você precisa estar logado para dar um feedback.

Clique aqui para efetuar o login
[Fechar]
Este post está disponível para assinantes da .net Magazine ou para quem possui Créditos DevMedia.

  Conheça os planos de créditos DevMedia e visualize esse post agora mesmo!

Plano conveniência – Neste plano este post custa R$ 0,00 (Compre agora)
Esse plano permite que você compre somente um post, pagando por ele seu preço sem desconto.

Plano ocasional: Aqui este post custa: R$ -1,00 (assinante) ou R$ -1,00 (não-assinante)
Este plano é ideal para quem tem interesse em mais de um post. Você compra um mínimo de R$ 50,00 em créditos e ganha, em média, 50% de desconto no preço do post. Compre Créditos agora!

Assinatura de Créditos (Plano econômico) – Aqui este post custa R$ -1,00
Este plano é ideal para quem tem interesse em muitos posts. Com esse plano você compra R$ 180,00 em créditos e ganha, em média, 80% de desconto no preço do post. Assine este plano agora!

> Saiba mais sobre o Sistema de Créditos DevMedia
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2012 - Todos os Direitos Reservados a web-03