regcomp()失败,'成功'

我试图使用正则表达式来验证文件名。 试过这个字符串regcomp()失败,'成功'

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

在网上检查:https://www.freeformatter.com/regex-tester.html 作品如预期的 'video-'
- >完全处于源字符串相匹配!

但是,使用:

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-正则表达式版本添加? 谢谢。

回答:

在线路

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

你通过未初始化可变rc不确定值。你应该通过你regcomp回来的错误,即res

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

以上是 regcomp()失败,'成功' 的全部内容, 来源链接: utcz.com/qa/262686.html

回到顶部