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

我没有报告该错误,也没有发现它在任何地方报告过。请这样做并返回此处。

相关内容