\d{3}\.?\d{3}\.?\d{3}-?\d{2}
Não, seu navegador não está com problemas de encoding e nem aconteceu do meu gato deitar no meu teclado. Esse monte de caracteres que parecem jogados aleatoriamente é um exemplo de expressão regular.
Expressões regulares, que a partir desse ponto serão chamadas de regexes (singular, regex) são conjuntos de caracteres que descrevem um padrão que será buscado num texto. Um exemplo vai deixar mais claro.
Considere o seguinte texto:
A história de toda a sociedade até aqui é a história de lutas de classes.
Se você quiser extrair a palavra classes
desse texto você pode usar a seguinte regex.
classes
Okay, não é muito útil, mas regexes podem fazer mais que isso. Pegue o exemplo a seguir:
Guerra Austríaco-Prusiana de 1866. O problema desta guerra foi discutido nas reuniões do Conselho Geral da Internacional Operária, celebrada nos dias 19 e 26 de junho, e 17 de julho de 1866 de julho. [Nota do MIA].
Se você quiser extrair todos os números desse texto você pode usar a seguinte regex.
\d+
Descrevendo o que está acontecendo:
-
\d
descreve um dígito (0, 1, 2, ..., 9) -
+
descreve que o símbolo anterior pode aparecer 1 ou mais vezes.
Dessa maneira, qualquer grupo de dígitos será encontrado. No caso do texto anterior, as seguintes informações serão encontradas:
- 1866
- 19
- 26
- 17
- 1866
Com esse segundo exemplo podemos ver um pouco melhor pra que servem regexes. Agora que passamos por isso, vamos começar do começo.
O começo
Nesse primeiro artigo vamos falar sobre caracteres literais, caracteres especiais e quantificadores.
Caracteres Literais
Como descrevemos acima, caracteres literais são caracteres que são encontrados literalmente. Então se houver qualquer caracter literal na regex, ele será procurado literalmente.
E quais são esses caracteres literais? Bom, são todos os caracteres que não são especiais. Vamos a eles, então?
Caracteres Especiais
Os caracteres especiais são caracteres que tem algum uso especial, como representar repetição, caracter opcional ou outras coisas.
O primeiro caracter especial que discutiremos é o caracter \
, chamado comumente de contra-barra. Esse caracter faz com que o próximo caracter passe a ser especial se for literal e literal se for especial. Vejamos alguns exemplos:
-
\d
=>d
é um caracter literal, mas precedido de\
, passa a significar qualquer dígito -
\+
=>+
é um caracter especial, mas precedido de\
(também chamado de "escapado"), passa a significar+
literalmente.
Outros caracteres especiais são .
, que representa qualquer caracter (exceto quebra de linha), ?
, que diz que o símbolo anterior é opcional, entre outros. Para uma lista mais completa dos caracteres especiais mais comuns nas engines de regex, clique aqui.
Quantificadores
Quantificadores são úteis para evitar repetições na regex. Por exemplo:
-
\d{4}
é o mesmo que\d\d\d\d
Há alguns tipos de quantificadores. Eles são:
-
*
significa que o símbolo anterior pode repetir 0 ou mais vezes (ou seja,ab*
identifica tantoa
quandoab
,abb
,abbbb
, etc...) -
+
significa que o símbolo anterior pode repetir 1 ou mais vezes (ou seja,ab+
identifica tantoab
,abb
,abbbb
, etc..., mas nãoa
) - {a,} significa que o símbolo anterior pode repetir a ou mais vezes
- {,a} significa que o símbolo anterior pode repetir de 0 a a vezes
- {a,b} significa que o símbolo anterior pode repetir de a a b vezes
-
?
significa que o símbolo anterior pode ocorrer 0 ou 1 vez
A regex do começo
Agora você deve ser capaz de entender a regex do começo.
\d{3}\.?\d{3}\.?\d{3}-?\d{2}
-
\d{3}
=> 3 dígitos -
\.?
=> um caracter.
opcional -
-?
=> um caracter-
opcional -
\d{2}
=> 2 dígitos
Dessa forma, essa regex identifica números com formato igual ao de CPFs num texto (validação não é feita nesse caso.)
Conclusão
Expressões regulares são uma ferramenta muito útil para processamento de textos, tanto para validação quanto para busca de informações. Apesar de ser recomendada cautela em seu uso pois o processamento de expressões regulares pode ser bastante complexo, no sentido computacional do termo, devido a uma estratégia chamada de backtracking, sobre a qual falaremos numa parte futura, regex é uma das ferramentas fundamentais no cinto de utilidades do profissional de tecnologia.
Nos vemos na próxima parte.