Bug da classe de caractere no nvi: [[: digit:]]] é interpretado como [[: alnum:]]

2

Uma pesquisa simples em nvi em texto como:

the quick red fox jumped 1 foot over the lazy 28 pound dog

usando a seguinte pesquisa

/[[:digit:]]

se comporta como

/[[:alnum:]]

Ou seja, ele encontra todos os caracteres quando repetido. Para esse assunto, todas as expressões de colchetes que eu tentei se comportaram como alnum. No entanto

/[0-9]

funcionou como esperado, apenas encontrando 1, 2 e 8. Eu tenho usado o nvi há algum tempo, mas há um abismo que está em meu conhecimento aqui. Ajuda é apreciada.

    
por user30527 04.12.2014 / 05:19

1 resposta

1

É um bug. Qualquer nome de classe com 5 caracteres (ou seja, todos eles, exceto xdigit ) é interpretado como alnum , tudo pela falta de um caractere pequeno. O patch é simples:

--- regex/regcomp.c~
+++ regex/regcomp.c
@@ -819,7 +819,7 @@
                NEXT();
        len = p->next - sp;
        for (cp = cclasses; cp->name != NULL; cp++)
-               if (STRLEN(cp->name) == len && MEMCMP(cp->name, sp, len))
+               if (STRLEN(cp->name) == len && !MEMCMP(cp->name, sp, len))
                        break;
        if (cp->name == NULL) {
                /* oops, didn't find it */

Eu não relatei o bug nem o informei em lugar algum. Por favor, faça isso e siga de volta aqui.

    
por 05.12.2014 / 02:09

Tags