Expressões Regulares

Conhecendo a base de dados para usar Expressões Regulares

Renan Muquiutti
em

Expressões regulares são poderosas porque não precisam de uma linguagem ou ferramenta específica para serem usadas. Entre tantas vantagens, podemos citar o fato de elas substituírem um enorme código com poucas ou às vezes uma única linha e o tempo de processamento que é muito menor.

Não precisamos de um ”quando” para usá-las, porém é necessário conhecimento um conhecimento que nem sempre está evidenciado: a ‘base de dados’ que vamos trabalhar.

Vamos imaginar um exemplo bem simples: Precisamos extrair apenas uma determinada data.

Nossa data será 10/05/1990. O nosso sistema tem apenas a alternância de ‘/’ por ‘-’ ok?

Sendo assim nossa expressão pode ser algo como:

Exemplo 1:

10.05.1990 -> Em expressões regulares, os pontos representam “qualquer coisa” (se não estiverem dentro de uma classe*).

OBS: caso essa expressão fosse usada sem que soubéssemos os dados que temos, poderíamos ter resultados bem diferentes: 10x05y1990, 10%05&1990, etc.

Se não tivéssemos conhecimento sobre nossos dados, poderíamos ter feito uma expressão bem diferente:

10[/,-.]0?5[/,-.](1990|90) -> Esta é mais completa e prevê vários tipos de ocorrências como:

10.05/90, 10/05/90, 10,05,1990, 10/5/1990, etc. Temos o 10 seguido por um desses elementos /,-. o mesmo acontece com o 05, mas com a diferença de poder ou não conter o 0. E por último, no exemplo, a data pode conter 1990 ou apenas 90.

Exemplo 2:

Tomaremos como exemplo o padrão de e-mail -> qualquercoisa@justdigital.com.br. Neste caso sabemos que a alternância está à esquerda do ‘@’, então poderíamos construir algo como:

^\d\s-_*/%$@@justdigital[.]com[.]br. Conseguiram observar? Por sabermos que nossos dados pertencem todos ao mesmo e-mail reduzimos nossa lógia à parte inicial.

O que a lógica faz?

[^]  -> Dentro de uma classe o ^ serve como negação, sendo assim, tudo que vem depois dentro da classe não pode estar contido no início do nosso e-mail.

\d -> Estamos dizendo que não queremos valores entre 0-9.

\s -> Aqui ignoramos caracteres como: Espaço, TAB e quebra de linhas.

-_*/%$@ -> O conjunto seguinte se refere ao próprio caractere que deve ser desconsiderado.

([a-z0-9_-]+) -> Mostra que nosso e-mail deve começar com uma letra e pode ou não conter números, underline (_) e hífen (-).

Importante! – Lembram que falamos no primeiro exemplo que os pontos representam qualquer caractere? Para evitar que nossa expressão retorne uma ‘string’ como: finadina@justdigital%com&br.

Calma! o problema não é ‘finadina’  e sim que no lugar dos pontos pode ser qualquer coisa.

Usamos os pontos envolvidos por [], assim eles não passam de um caractere comum e serão tratados como pontos.

A grande questão é que nem sempre precisamos de uma expressão robusta se temos TOTAL conhecimento dos dados que estamos manipulando.

*A classe é representada por []. Exemplo: aqui temos uma classe que contém letras minusculas [a-z].

Referência: Mastering Regular Expressions, de Jeffrey E.F Friedl


Serviços relacionados

Nós ajudamos você a liderar iniciativas de transformação digital na sua empresa.
Agende uma conversa