Qual é a diferença entre [-a-z] e [a-z] na expressão regular?

0

Qual é a diferença entre [ - a-z] e [a-z] na expressão regular? Qual é o primeiro significado de menos em [ - a-z]?

Do padrão /etc/adduser.conf (Por exemplo):

#check user and group names also against this regular expression.'
#NAME_REGEX="^[a-z][-a-z0-9_]*\$" 
    
por illiterate 18.02.2018 / 16:27

2 respostas

2

O hífen tem apenas um significado especial quando não é o primeiro ou o último caractere em uma classe de caracteres entre colchetes.

[a-z] corresponde a todas as letras minúsculas ASCII de a a z . [-a-z] corresponde a todas as letras minúsculas ASCII de a a z e o hífen - .

Isso está documentado na documentação do Perl :

Within a list, the "-" character specifies a range of characters, so that a-z represents all characters between "a" and "z", inclusive. If you want either "-" or "]" itself to be a member of a class, put it at the start of the list (possibly after a "^" ), or escape it with a backslash. "-" is also taken literally when it is at the end of the list, just before the closing "]" .

    
por 18.02.2018 / 16:37
0

O menos no início é usado para incluir o caractere menos literal no grupo. Pode ser também no final do grupo. Comparar:

$ echo abc- | grep [w-x]

$ echo abc- | grep [w-x-]
abc-
$ echo abc- | grep [-w-x]
abc-

Quando não está no início ou no final, a função é descrever um intervalo, como em w-x .

    
por 18.02.2018 / 16:36