No último artigo iniciamos no mundo das expressões regulares. Neste presente, continuaremos a expandir nossas ferramentas para aumentar as possibilidades de match falando sobre classes de caracteres.
Classes de caracteres
Classes de caracteres são usadas para podermos identificar diversos caracteres diferentes numa determinada posição. Vamos de exemplo novamente que é sempre mais fácil de explicar:
Paul[ao]
Essa expressão regular descreve tanto Paula
quanto Paulo
. Isso é feito com a sintaxe []
.
Quando uma determinada posição pode conter mais de um caracter, usar uma classe de caracteres é a solução. Também são suportados intervalos de dígitos e caracteres, dessa maneira:
-
[0-5]
=> representa os dígitos de 0 a 5. -
[f-j]
=> representa os caracteres de f a j. -
[A-Fa-f0-9]
=> representa os caracteres de a a f, de A a F (regex é case sensitive, então maiúsculas e minúsculas são tratadas de maneira diferente) e os dígitos de 0 a 9. Basicamente, qualquer dígito hexadecimal.
Classes de caracteres também podem incluir caracteres não-alfanuméricos. No entanto, sua utilização muda. Os únicos caracteres entendidos como especiais dentro de uma classe de caracteres são o ]
, pois significa o fim da classe, ^
no começo da classe, pois significa negação (mais informações à frente) e -
, pois indica que estamos falando de um intervalo. Dessa maneira, qualquer caracter que não os citados anteriormente é entendido como literal dentro de classes de caracteres.
-
Abc[*+]
=> identifica os textos Abc* e Abc+
Para usar os outros três caracteres (]
, ^
e -
), é necessário escapá-los.
-
[a-f]
=> identifica os caracteres de a a f -
[a\-f]
=> identifica os caracteres a, - e f
Se você desejar que a classe de caracteres represente caracteres que não podem ser identificados, utilize o caracter ^
no começo da classe.
-
[^abc]
=> identifica qualquer caracter que não os caracteres a, b e c -
[^0-9]
=> identifica qualquer caracter que não seja um dígito
Cautela
É importante ressaltar que classes de caracteres negados ainda assim precisam dar match num caracter. A regex a[^f]
não quer dizer "Letra 'a' não seguida da letra 'f'", mas fim "Letra 'a' seguida por um caracter que não seja a letra 'f'". E qual é a diferença?
A regex a[^f]
dá match na letra 'a' em Teresa.
, porque o caracter '.' não é 'f', mas não dá match na letra a em Teresa
, pois não há nenhum caracter depois do 'a'.
Conclusão
Sem conclusão dessa vez ^^. Até a próxima parte