gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:12:57 25 4
gpt4 key购买 nike

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

请注意,正如 Mike 在上面的评论中提到的,我在末尾添加了 $ anchor 。如果您忽略它,它会将类似 module_custom.dllfoo 的内容视为有效匹配。

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com