C regexec返回错误结果

时间:2020-09-14 10:36:45

标签: c regex

我正在尝试将regexec与 [A-Za-z0-9 _-] 模式一起使用,但似乎无法正常工作。例如“ AZaz09%” 包含非法字符'%',但令人惊讶的是,该匹配正常,并且找到的子字符串大小始终为(int)pm.rm_eo-( int)pm.rm_so = 1 安装了 6 。有人知道我在做什么错吗?

#include <stdio.h>
#include <regex.h>

int main()
{
    char *string = "AZaz09%";
    char *pattern = "[A-Za-z0-9_-]";
    regex_t reg;
    int match = REG_NOMATCH;

    if (regcomp(&reg, pattern, 0) == 0)
    {
        regmatch_t pm;
        match = regexec(&reg, string, 1, &pm, 0);
        printf("%d\n",(int)pm.rm_eo - (int)pm.rm_so);
    }
    regfree(&reg);
    
    if (match != REG_NOMATCH)
    {
        printf("OK");
    }
    else
    {
        printf("NOK");
    }
    return 0;
}

1 个答案:

答案 0 :(得分:-1)

[A-Za-z0-9_-]将匹配包含您列出的这些字符的至少一次出现的任何行。但这并不能防止其他字符的出现。

相反,请执行^[A-Za-z0-9_-]+$

^表示行的开始,$表示行的结束。因此,以上内容将匹配所有不包含除所列字符以外的其他任何字符的行,并且还包含这些字符中的至少一个。如果您还希望允许零长度的行,请将+更改为*

相关问题