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