我正在尝试使用正则表达式模式来检测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

    最佳答案

    C++ 11正则表达式引擎似乎不支持[:alnum:]字符类。根据this page,它等效于[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);
    }
    

    请注意,我在最后添加了$ anchor ,如Mike在上面的评论中所提到的。如果您忽略了它,它将认为像module_custom.dllfoo这样的有效匹配。
    [:alnum:]字符类是POSIX regex风格的独特之处。我不熟悉C++中的正则表达式,但it appears表示默认引擎与EMACScript兼容,而不与POSIX兼容。但是,根据this page看来,可能可以将其切换为使用POSIX兼容引擎?如果使用POSIX regex语法对您很重要,那么也许某个知识渊博的人也可以加入有关此信息的更多信息。

    关于c++ - 使用正则表达式检测带有特定前缀的DLL文件名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33175414/

    10-11 22:40
    查看更多