Metacaracteres
Formada pelo agrupamento entre símbolos chamados de metacaracteres e caracteres literais, uma
expressão pode ser considerada uma regra pois, diante das condições estabelecidas, retorna
somente os resultados positivos. Os metacaracteres têm funções especiais e não podem ser usados
como um caractere literal. Caso esse seja o objetivo, o metacaractere deve ser precedido por uma
barra invertida (\).
Também chamamos esse recurso de escape. ele retorna o valor literal do elemento à sua direita.
Veremos diversos metacaracteres, como ‘.’ ,‘*’, ‘^’, ‘$’, ‘[’, ‘]’ etc. Todos eles têm alguma função especial
dentro das expressões regulares e quando não estivermos nos referindo a essas expressões,
podemos simplesmente utilizar o escape antes deles. Por exemplo: ‘\.’ ,‘\*’, ‘\^’, ‘\$’, ‘\[’, ‘\]’, etc.
Metacaracteres Tipo Representante
Por exemplo, em uma busca utilizando REGEX, o ponto final (.) é um caractere curinga e corresponde
a todos os caracteres. Ao proceder utilizando esse caractere de forma exclusiva, obteremos como
resultado todos os caracteres da string, sendo exibidos um por um como decorrência da busca. Ao
adicionarmos uma barra invertida antes desse metacaractere, teremos outro resultado. O match é
feito apenas quando um ponto final for encontrado na cadeia de caracteres.
Além do ponto final, que representa todos os caracteres, há opções de representar um ou mais
caracteres por meio dos colchetes ([]). De forma específica os colchetes são usados para criar classes
de caracteres, podemos ter uma lista ‘[…]’ e lista negada ‘[^…]’.
Junto com o ponto final, as listas formam uma categoria de representantes. Há, ainda, o grupo de
quantificadores, âncoras e alguns outros, mas, por hora, vamos falar um pouco mais sobre as listas.
Considere a Figura 2 apresentada mais cedo, caso fosse necessária uma reorganização dos horários
com os seguintes critérios:
As partidas devem ser realizadas a cada 30 minutos;
Partidas realizadas entre hora cheia (00) e 29 min. devem mudar para 15 min.;
Partidas realizadas entre 30 e 59 minutos devem mudar para 45.
Assim, caso a partida seja às 04:22, o novo horário será 04:15, em outra situação com partida às 08:55,
o horário deve ser ajustado para 08:45. Note que o problema apresenta um desafio interessante e,
avaliando o cenário apresentado, minutos preciosos certamente seriam gastos nesta tarefa. Como
podemos utilizar a REGEX neste caso?
Inicialmente, adicionamos os ‘:’ (dois pontos) para definir horas e minutos, acreditamos que isso
facilite o entendimento. Na sequência, precisaremos buscar minutos e suas variações entre 0 e 2
para o primeiro algarismo, com a expressão ‘[0-2]’. Note que o ‘-’ (hífen) representando o intervalo
entre os valores foi colocado. A ausência desse operador definiria a busca exclusiva dos termos: 0 ou
2.
Um breve exemplo a partir desse segundo argumento seria a busca textual da palavra ‘não’ escrita
sem o acento. A instrução ‘n[aã]o’ traria ambos os resultados, com ou sem acento. Note que uma
REGEX pode ser construída com diferentes intervalos numéricos e textuais. Para saber o que cada
intervalo contempla é preciso estar atento(a) à Tabela ASCII, pois ela fornece as diretrizes sobre o
conjunto de caracteres presentes em uma sequência.
Por fim, precisaremos do complemento que pode ser qualquer dígito entre 0 e 9. Pensando na
descrição anterior, teríamos duas possibilidades, ‘[0123456789]’ ou ‘[0-9]’, sendo o segundo menor,
mais intuitivo e mais interessante para essa situação. Assim, temos ‘:[0-2][0-9]’. Essa, no entanto, não é
a única forma de realizar uma busca por dígitos decimais. O comando ‘\d’ é relativo a qualquer dígito
decimal entre 0 e 9. Com isso, poderíamos usar ‘:[0-2][\d]’ para obter o mesmo resultado.
A partir do padrão formado, podemos facilmente buscar o resultado inverso, ou seja, partidas com
horários entre 30 e 59 min. Uma forma de fazer isso seria modificar a expressão anterior com uma
lógica inversa, ou seja, negar o termo anterior pode trazer os valores procurados. A nova expressão
ficaria ‘:[^0-2][\d]’.
Como dito, as expressões regulares consideram a Tabela ASCII e, portanto, consideram as diferenças
entre localidades. Isso resulta em grandes diferenças realizadas em buscas nos documentos escritos
na Língua Portuguesa e Inglesa. O alfabeto norte-americano não tem caracteres acentuados como
‘áéóõç’, ‘áéíóú’ ou ‘ÁÉÍÓÚ’. Logo, a instrução ‘[a-z]’ não retornaria os caracteres minúsculos.