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