使用正则表达式检测具有特定前缀的DLL文件名

时间:2015-10-16 16:35:28

标签: c++ regex c++11

我正在尝试使用正则表达式模式来检测是否有dll文件名:

  • module_
  • 开头
  • .dll
  • 结束
  • 中间的所有字符都是非特殊字母数字字符

以下是我使用的代码:

bool IsModule(std::string const& name)
{
    static std::regex const regex("^module_[:alnum:]+\\.dll");
    return std::regex_match(name, regex);
}

使用在线正则表达式调试器,我无法解决问题。当我使用module_custom.dll作为输入文件名进行测试时,它不会将其视为匹配。

Demo

2 个答案:

答案 0 :(得分:4)

C ++ 11正则表达式引擎似乎不支持[:alnum:]字符类。根据{{​​3}},它等同于[a-zA-Z0-9],因此您可以这样做:

bool IsModule(std::string const& name)
{
    static std::regex const regex("^module_[a-zA-Z0-9]+\\.dll$");
    return std::regex_match(name, regex);
}

请注意,我在最后添加了$锚点,正如迈克在上面的评论中提到的那样。如果省略,则会将module_custom.dllfoo视为有效匹配。

[:alnum:]字符类是POSIX正则表达式的特性。我不熟悉C ++中的正则表达式,但是this page默认引擎与EMACScript而不是POSIX兼容。然而,根据it appears,看起来可以将其切换为使用POSIX兼容引擎?如果使用POSIX正则表达式语法对您来说很重要,那么可能有更多知识渊博的人可以参考更多相关信息。

答案 1 :(得分:1)

尝试这个

bool IsModule(std::string const& name)
{
    static std::regex const regex("^module_\\w+\\.dll");
    return std::regex_match(name, regex);
}

不确定:alphanum:适用于C ++ 11。