POSIX

  1. Classes de caracteres

Nessa aula, eu vou falar sobre POSIX. POSIX é um acrônimo para Portable Operating System Interface (Interface Portável entre Sistemas Operacionais). É um padrão criado para tratar da portabilidade entre sistemas operacionais. Algumas partes desse padrão lidam com expressões regulares. Isso não quer dizer que as engines aderiram estritamente ao POSIX. Algumas tem particularidades e não há um único padrão.

O POSIX dividiu as engines de expressões regulares em dois grupos: BRE (Basic Regular Expressions) e ERE (Extended Regular Expressions). A tabela abaixo lista a diferença entre as duas:

Funcionalidade BRE ERE
+ e ? Não Sim
{x,y} \{x,y\} Sim
Grupos \(...\) Sim
Alternação Não Sim
Backreferences Sim Não

Como vocês podem ver na tabela, o quantificador intervalo é colocado com as chaves escapadas no BRE, assim como os grupos são colocados com os parênteses escapados.

Classes de caracteres

O POSIX também tem suas próprias classes de caracteres. Elas tem a seguinte sintaxe: [:classe:]. Elas sempre tem que aparecer dentro de uma classe de caracteres convencional. Exemplos: [[:alpha:]] (casa com uma letra) e [39[:alpha:]]+ (casa com uma letra ou com os dígitos 3 ou 9 pelo menos uma vez). As classes de caracteres do POSIX não são suportadas por todas as engines. Abaixo estão listadas as principais classes de caracteres do POSIX:

[:alpha:]
Letras. equivale a [A-z].
[:upper:]
Letras maiúsculas. Equivale a [A-Z].
[:lower:]
Letras minúsculas. Equivale a [a-z].
[:digit:]
Dígitos. Equivale a [0-9].
[:alnum:]
Letras e dígitos. Equivale a [0-9A-z].
[:space:]
Espaços.
[:xdigit:]
Dígitos hexadecimais. Equivale a [A-Fa-f0-9].

Note que usar as classes de caracteres do POSIX deixa a expressão regular mais fácil de entender porque ela usa um nome para a classe de caracteres, e isso deixa a expressão regular mais autoexplicativa, apesar de ser um pouco verboso.