Por Lucas Duarte
No artigo anterior, comparamos as soluções de um mesmo problema de duas formas distintas – com e sem o uso de expressões regulares. Neste, vamos aprofundar um pouco nas definições, utilizando exemplos em que os matches de cada expressão regular são destacados em cores.
Esperamos que neste formato, o artigo possa ser utilizado como fonte de consulta para o uso desse recurso.
Definições
Caracteres comuns (e.g. A, x, 9, _) fazem match com eles mesmos:
Caracteres especiais como . ^ $ * + ? { [ \ | ( ) devem ser precedidos por barra invertida:
O caractere pipe ( | ) significa “OU”. Desta forma, a|b equivale a caractere a OU caractere b:
Caracteres como tabulação (\t), retorno de carro (\r) e nova linha (\n) são reconhecidos:
Classes de caracteres definem conjuntos ou ranges de caracteres:
O símbolo acento circunflexo no início seleciona caracteres que sejam diferentes dos listados:
Classes pré-definidas:
O caractere ponto faz match com qualquer caractere, exceto com quebras de linha:
Padrões podem ser repetidos:
Na busca a.+b, o caractere + é “guloso”, fazendo o match até o última letra b disponível.
Com o modificador ? o caractere + deixa de ser “guloso”, e o match para na primeira letra b.
Considerações finais
As definições apresentadas acima são um subconjunto de um vasto conteúdo, e existem ainda outras definições mais avançadas. Embora sejam numerosas, a prática e a constante consulta em materiais como o presente documento resultam em simplificações interessantes de código, e podem substituir longas cadeias de ifs e elses.
As expressões regulares aqui apresentadas funcionam bem nas linguagens Java e Python mas, como mencionado no artigo anterior, é importante testar e validar as expressões na linguagem em uso.
O leitor é encorajado a revisitar o problema resolvido no artigo anterior e, de posse da fonte de consulta aqui apresentada, propor soluções alternativas, com diferentes expressões regulares.
Como fontes adicionais de consulta, são sugeridos este documento de introdução às expressões regulares usando linguagem Python e a documentação da classe Java Pattern, que também várias informações de forma sumarizada.
Lucas é especialista em desenvolvimento de software na Daitan. Formado em engenharia de computação pela Universidade Federal de Itajubá, possui experiência em automação e paralelização de procedimentos e tarefas envolvendo controle e comunicação com equipamentos remotos, extração e geração de dados e integração com outros sistemas de software.