gpt4 book ai didi

c++ - 与通配符匹配的文件名

转载 作者:IT老高 更新时间:2023-10-28 22:16:14 30 4
gpt4 key购买 nike

我需要实现类似我自己的文件系统的东西。一个操作是 FindFirstFile。我需要检查调用者是否传递了 .、sample*.cpp 等内容。我的“文件系统”实现将“文件名”列表作为 char* 数组提供。

有没有实现这个文件名匹配的Windows函数或者源代码?

最佳答案

对于使用 '*' 和 '?' 的通配符名称匹配试试这个(如果你想避免提升,使用 std::tr1::regex):

#include <boost/regex.hpp>
#include <boost/algorithm/string/replace.hpp>

using std::string;

bool MatchTextWithWildcards(const string &text, string wildcardPattern, bool caseSensitive /*= true*/)
{
// Escape all regex special chars
EscapeRegex(wildcardPattern);

// Convert chars '*?' back to their regex equivalents
boost::replace_all(wildcardPattern, "\\?", ".");
boost::replace_all(wildcardPattern, "\\*", ".*");

boost::regex pattern(wildcardPattern, caseSensitive ? regex::normal : regex::icase);

return regex_match(text, pattern);
}

void EscapeRegex(string &regex)
{
boost::replace_all(regex, "\\", "\\\\");
boost::replace_all(regex, "^", "\\^");
boost::replace_all(regex, ".", "\\.");
boost::replace_all(regex, "$", "\\$");
boost::replace_all(regex, "|", "\\|");
boost::replace_all(regex, "(", "\\(");
boost::replace_all(regex, ")", "\\)");
boost::replace_all(regex, "{", "\\{");
boost::replace_all(regex, "{", "\\}");
boost::replace_all(regex, "[", "\\[");
boost::replace_all(regex, "]", "\\]");
boost::replace_all(regex, "*", "\\*");
boost::replace_all(regex, "+", "\\+");
boost::replace_all(regex, "?", "\\?");
boost::replace_all(regex, "/", "\\/");
}

关于c++ - 与通配符匹配的文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3300419/

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