• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

regcomp()失败,’成功’

c/c++ 来源:msadras 3次浏览

我试图使用正则表达式来验证文件名。 试过这个字符串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); 

版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)