nvi의 문자 클래스 오류: [[:digit:]]는 [[:alnum:]]로 해석됩니다.

nvi의 문자 클래스 오류: [[:digit:]]는 [[:alnum:]]로 해석됩니다.

간단한 검색잉웨이텍스트와 관련하여 예를 들면 다음과 같습니다.

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

다음 검색을 이용하세요

/[[:digit:]]

처럼 행동하다

/[[:alnum:]]

즉, 반복되면 모든 문자를 찾습니다. 그 문제에 대해 내가 시도하는 모든 대괄호 표현식은 alnum으로 작동합니다. 하지만

/[0-9]

예상대로 작동하며 1, 2, 8만 발견됩니다. 한동안 nvi를 사용해 왔지만 지식에는 큰 격차가 있습니다. 도와 주셔서 감사합니다.

답변1

이것은 실수입니다. 5자 길이의 클래스 이름(즉, . 를 제외한 모든 클래스 이름 )은 작은 문자가 누락된 xdigit것으로 해석됩니다 . alnum패치는 간단합니다:

--- 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 */

나는 버그를 보고하지 않았고 어디에도 보고된 것을 찾지 못했습니다. 그렇게 하고 여기로 돌아오십시오.

관련 정보