我正在尝试使用正则表达式模式来检测是否有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
作为输入文件名进行测试时,它不会将其视为匹配。
答案 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。