regcomp()失败'成功'

时间:2017-12-18 10:53:14

标签: c++ regex validation filenames

我正在尝试使用正则表达式来验证文件名。 试过这个字符串

"^(?!(?:CON|PRN|AUX|NUL|COM[1-9]|LPT[1-9])(?:\.[^.]*)?$)[^<>:\"/\\\|\\?*\x00-\x1F]*[^<>:\"/\\\|\?*\x00-\x1F\\ .]$"

在线检查员

https://www.freeformatter.com/regex-tester.html 按预期工作'视频 - '   - &GT;完全匹配源字符串!。

但是,使用:

    bool regexCompile(regex_t &regex, const char *pattern)
    { 
        int res = 0;
        res = regcomp(&regex, pattern, REG_EXTENDED);
        printf("res = %d\n",res);
        if(res) // regex compiled unsuccessfully
        {
            int     rc;
            char    buffer[100];
            regerror(rc, &regex, buffer, 100);
            printf("regcomp() failed with '%s'\n", buffer);
            return false;
        }
        return true;
     }

bool isValidFileName(const char *fileName)
{
    regex_t regex;
    int res = 0;
    // regex not complete
    const char* pattern = "^(?!(?:CON|PRN|AUX|NUL|COM[1-9]|LPT[1-9])(?:\\.[^.]*)?$)[^<>:\"/\\\\|?*\x00-\x1F]*[^<>:\"/\\\\|\\?*\x00-\x1F\\ .]$";
    if(regexCompile(regex, pattern) != true)
    {
        return false;
    }
    res = regexec(&regex, fileName, 0, NULL, 0);
    if(!res)
    {
        return true;
    }
    return false;
}

我得到文件名“video - ”:

res = 13
regcomp() failed with 'Success'
0

需要在c-regex版本中添加任何额外的反斜杠? 感谢。

1 个答案:

答案 0 :(得分:2)

在第

regerror(rc, &regex, buffer, 100);

您传递未初始化变量rc indeterminate 值。您应该传递从regcomp返回的错误,即res

regerror(res, &regex, buffer, sizeof buffer);