O que '[]' faz em um regex?

0

Esta página da web contém várias expressões regulares contendo [] :

link

Um exemplo:

[][_,.;:"&<>()/\{}''~!@#$%A-Za-z0-9*|+-]*

A página fornece este comentário sobre o sabor particular das expressões regulares usadas:

The regular expressions defined here are not compliant with the POSIX 1003.2 standard as they include the '\n' and '\t' special characters. These regular expressions have been tested using version 0.12 of Richard Stallman's GNU regular expression library in POSIX mode.

O que significa o [] ?

    
por Praxeolitic 30.03.2015 / 21:25

3 respostas

2

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}
    
por 30.03.2015 / 21:44
1

Ao seguir imediatamente o colchete de abertura, o fechamento significa apenas ] . O próximo colchete de abertura também significa simplesmente seu próprio caractere [ .

$ echo "a[b" | grep '[]]'
$ echo "a[b" | grep '[[]' 
a[b
$ echo "a[b" | grep '[]'  
grep: Unmatched [ or [^
    
por 30.03.2015 / 21:37
0

Pelo que sei, [] não significa nada, colchetes são usados para definir intervalos de caracteres. Um intervalo vazio não significa nada.

Agora, olhando para o log de alterações em seu link ...

1.048 2007-11-18

Changes: (jdw/kh)

  • add '[]' to allowed characters for data types code and ucode -
    
por 30.03.2015 / 21:33

Tags