如何修改这个正则表达式模式?

问题描述 投票:0回答:1

我想查找以“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

c++ regex
1个回答
0
投票

std::regex_match
将给定的正则表达式与整个字符串进行匹配。

您可以使用

std::regex_search
来将正则表达式与字符串的任何部分进行匹配:

std::regex reg("-access\\d\\.log$");
return std::regex_search(file_name, reg);

请注意,您应该转义

.
以匹配文字
.
,并使用
$
来锚定字符串的末尾。也不需要使用捕获组,因为您没有使用它们。

© www.soinside.com 2019 - 2024. All rights reserved.