Basico de Expressões Regulares Regex

Postado 17:23 14/11/2022 por COMPARTILHAR

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.

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
FrameworkDescriçãoModelo
Escapeevita um conjunto de metacaracteres (\, *, +, ?, |, {, [, (,), ^, $,., #, e espaço em branco) substiuindo ele com seu código de escapeRegex.Escape( input, pattern)
IsMatchindica se a expressão regular encontrar a entrada de string associadaRegex.IsMatch( input, pattern) Regex.IsMatch( input, pattern, options)
Matchpesquisa uma entrada de string para uma ocorrência de uma expressão regular e retorna resultado preciso como um objeto Match únicoRegex.Match( input, pattern) Regex.Match( input, pattern, options)
Matchespesquisa 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 vezesRegex.Matches( input, pattern) Regex.Matches( input, pattern, options)
Replacedentro de uma entrada de string especificada, substitui string que associa com expressão regular por outra especificada para reposiçãoRegex.Replace( input, pattern, replacement) Regex.Replace( input, pattern, replacement, options)
Splitdivide uma string em um array de substrings nas posições definidas pela expressão regularRegex.Split( input, pattern) Regex.Split( input, pattern, options)
Unescapesubstitui código de escape pelo caractere de escapeRegex.Unescape( input, pattern)
Opções de Execução
FrameworkCaractere InlineDescrição
NoneN/Anenhuma opção especificada
IgnoreCaseiassocia case-insensitive
Multilinemmodo multi-linha; modifica o significado de ^ e $, assim ele executa associandoo inicio e fim, respectivamente, de alguma linha
ExplicitCapturensomente capturas validas são explicitamente grupos nomeados ou numerados do formato(?...)
SingleLinesmodo linha simples; modifica o significado do caractere (.) assim ele associa todoscaracteres (em lugar de cada caractere exceto \n)
IgnorePatternWhitespacexpermite espaço em branco e comentários no pattern
CompiledN/Aexpressões regulares seriam compilados para um assembly
RightToLeftN/Aprocura mover da direita para esquerda em lugar da esquerda para direita
Global (não contém na framework)gpesquisa global para todas as ocorrências do padrão
Regex na Prática
FrameworkExemplo
IsMatchDim 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)
MatchDim newMatch1 As Match = Regex.Match("Editora Wrox", "wrox", RegexOptions.IgnoreCase) Response.Write(newMatch1.Success)
MatchesDim newMatches As MatchCollection = Regex.Matches("Editora Wrox", "wrox", RegexOptions.IgnoreCase) For Each myMatch As Match In newMatches Response.Write(myMatch.Value) Next
ReplaceDim 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")
SplitDim newString1() As String = Regex.Split("Editora Wrox", "wrox", RegexOptions.IgnoreCase) For Each str As String In newString1 Response.Write(str & " ") Next

Referências

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

Escape
CaractereDescriçã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") .
\aalarm \u0007
\bveja âncora.
\ttab \u0009
\rretorno de carro \u000D
\vtab vertical \u000B
\falimentação de formulário \u000C
\nnova linha \u000A
\eescape \u001B
\040caractere ASCII como octal (3 dígitos). Por exemplo, um caractere \040 representa um espaço
\x20caractere ASCII usando representação hexadecimal (3 dígitos)
\cCcaractere ASCII de controle. Por exemplo, \cC é equivalente a Ctrl-C
\u0020caractere ASCII usando representação hexadecimal (4 dígitos)
Agrupamento
CaractereDescriçã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
CaractereDescriçãoModeloRepresentaçãoExplicaçã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".
\bfronteira do caractere"car\b""car"; "tocar"associa a fronteira da palavra "car", embora não "carburador".
\Bnã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".
\Ainício da string"\Apattern""patterns"--
\Zfim da string"pattern\Z""topattern"--
Quantificadores
CaractereDescriçãoModeloRepresentaçãoExplicaçã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 vezes"o""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
CaractereDescriçãoModeloRepresentaçãoExplicação
"|" (pipe)uma ou outra ocorrência"(z|f)ood""zood" ou "food"o caractere | (pipe) representa uma ocorrência ou outra
Classes
ClasseDescriçã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
ClasseCaractere
[:digit:]\d
^[:digit]\D
[:space:]\s
^[:space:]\S
[:word:]\w
^[:word:]\W
Parâmetros BackReference
CaracteresDescrição
\numberbackreference 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).
\kbackreference nomeada. (http://msdn2.microsoft.com/en-us/library/ksz2azbh.aspx)
Comentário
CaractereDescrição
#insere comentário dentro da expressão

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çãoExpressão
Dígito^\d+$
Decimal^[+-]?((\d+|\d{1,3}(\.\d)+)(\,\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]\d):([0|1|2|3|4|5] \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$
Telefone^\(\d\)-\d-\d$
Senha^\w{4,10}$ ^[a-zA-Z]\w{3,9}$ ^[a-zA-Z]\w*\d+\w*$

Referências
https://www.devmedia.com.br/iniciando-expressoes-regulares/6557

  • 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.

Comentários