Essa é uma revisão anterior do documento!
Tabela de conteúdos
Expressões regulares
Expressões regulares são descrições formais para padrões de caracteres. Mas afinal, o que isso significa?
Uma descrição formal é uma descrição que deve seguir regras específicas para ser compreendida, isto é, não é como um texto livre, no qual se pode fazer a mesma descrição de várias formas diferentes, tendo todas elas o mesmo significado. Não, na descrição formal, não há muito espaço para variações, existe modos bem específicos de se descrever algo.
E que algo é esse? No caso das expressões regulares, esse algo são caracteres. Ou seja, dentro de um conjunto arbitrário de caracteres, podem existir determinados padrões, mais especificamente, combinações de caracteres que estão conforme um padrão.
Existe uma sintaxe a ser usada para formular expressões, e nesse sentido podemos dizer que expressões regulares são uma linguagem específica de domínio. Porém não há apenas uma sintaxe: existem diferentes especificações, e diferentes implementações de interpretadores de expressão regular.
Aplicabilidade
Falei sobre o que são expressões regulares, mas talvez não tenha explicado muito bem para que servem. Ocorre que podemos observar padrões de caracteres em diversas situações.
Para entender melhor o que são padrões, imagine por exemplo a definição de um nome próprio. Ele começa com uma letra maiúscula, seguida de uma ou mais letras minúsculas. Um CPF é um outro padrão, composto de 11 números, dos quais os 9 primeiros são agrupados de 3 em 3, separados por pontos, e os últimos dois são dígitos verificadores, separados dos demais por um hífen.
Se quiser pesquisar por um nome ou CPF específico em um texto, é fácil, basta procurar por uma ocorrência dele. Mas se quiser procurar qualquer nome próprio ou qualquer CPF, você precisa expressar essa pesquisa como um padrão a ser procurado. É aí que expressões regulares são úteis. Elas proveem uma sintaxe para definir o padrão de pesquisa.
História
…
Padronização
Expressões regulares são padronizadas? Sim e não. Explico. Ocorre que existe mais de um padrão, o que na prática pode ser entendido como ausência de padrão. Alguns padrões são mais conhecidos e utilizados, e outros menos.
Um dos padrões mais conhecidos é o POSIX, que prevê duas formas de expressão regular: básicas e estendidas. Ambas são descritas nas seguintes revisões:
Outro padrão conhecido é o utilizado em Perl:
Cabe destacar que o padrão Perl não é usado apenas na linguagem Perl. Ele foi adaptado posteriormente para outras bibliotecas e ambientes de execução.
Ainda outro padrão é o I-Regexp (RFC 9485), que possui um escopo enxuto e o foco em interoperabilidade entre as bibliotecas (e até com outros padrões).
Por fim, temos também a especificação do ECMAScript (ECMA 262), que é aplicável a implementações da linguagem Javascript.
Implementações
Cada implementação pode adotar um padrão diferente para a interpretação de expressões regulares (ou não adotar nenhum, aliás).
E essas implementações podem tanto residir em algum ambiente de desenvolvimento (isto é, para uso interno na codificação dos programas), como em programas que precisam realizar processamento de expressões regulares (o que ocorre em servidores Web, indexadores de conteúdo, servidores de e-mail, editores de texto e vários outros tipos de programa).
Para o padrão POSIX, as implementações estão presentes nas bibliotecas que implementam o POSIX. Como a biblioteca POSIX é uma extensão da biblioteca C, então é comum que observar implementações conjuntas dos dois padrões (por exemplo, glibc e musl-libc são ao mesmo tempo bibliotecas C e bibliotecas POSIX).
Existem também implementações avulsas do motor de expressões regulares do POSIX. Por exemplo, a biblioteca TRE implementa expressões regulares aderentes ao POSIX, porém não outras partes do POSIX e nada da biblioteca C.
O padrão de expressões regulares do POSIX, obviamente é o padrão utilizado em programas especificados no padrão POSIX.
Já o padrão de Perl (também obviamente) é usado em Perl, mas acabou por se tornar influente, e posteriormente foi reimplementado na biblioteca PCRE. Esta por sua vez é utilizada em PHP para realizar o processamento de expressões regulares. Também é usada no servidor Apache, no escaneador de portas Nmap, dentre vários outros programas.
Sintaxe
…
Outros materiais
Outras páginas e portais dedicados ao assunto de expressões regulares.
- Regular Expression Tutorial (em inglês)
- Perl regular expressions tutorial (em inglês)