我想查找以“access”和数字结尾的日志文件,例如
500m-access0.log
。
我的代码:
bool is_access_log(const char *file_name)
{
std::string name(file_name);
struct stat file_info;
if (stat(file_name, &file_info) < 0 || S_ISDIR((&file_info)->st_mode))
{
// return false if dir
return false;
}
std::regex reg("(.)(-access)(\\d).log");
return std::regex_match(file_name, reg);
}
但是当我使用
false
和 500m-access0.log
时我得到了
any_name-access3.log
std::regex_match
将给定的正则表达式与整个字符串进行匹配。
您可以使用
std::regex_search
来将正则表达式与字符串的任何部分进行匹配:
std::regex reg("-access\\d\\.log$");
return std::regex_search(file_name, reg);
请注意,您应该转义
.
以匹配文字 .
,并使用 $
来锚定字符串的末尾。也不需要使用捕获组,因为您没有使用它们。