Os padrões são escritos desta maneira para evitar a necessidade de escapar do caractere ]
(e também do hífen) dentro da classe de caractere que está sendo definida.
Sem escape, ]
fecha uma classe de caractere. No entanto, se você seguir [
imediatamente com ]
, é uma construção especial que indica que o 'colchete de fechamento' deve ser incluído na classe de caractere.
Da mesma forma, depois de abrir uma classe de caractere com [
, o uso adicional de [
indica a inclusão de 'colchete de abertura' na classe de caractere, já que "classes de caractere aninhadas" não são permitidas.
O local do hífen ( -
) no final da definição de classe também é um caso de uso especial, pois o uso de um hífen em uma classe de caracteres representa um intervalo de caracteres para incluir na classe.
Assim, o mecanismo Regex analisa seu padrão de amostra como:
[ {open the character class}
] {include closing bracket}
[_,.;:"&<>()/\{}''~!@#$%A-Za-z0-9*|+ {include a bunch of characters; [().*{}|+, etc. are not special characters within a class definition}
- {include hyphen}
] {close the character class}
* {zero or more repetitions of the class}