Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

I need to implement something like my own file system.

(我需要实现类似自己的文件系统的功能。)

One operation would be the FindFirstFile.

(一个操作将是FindFirstFile。)

I need to check, if the caller passed something like .

(我需要检查呼叫者是否传递了类似的信息)

, sample*.cpp or so.

(,sample * .cpp左右。)

My "file system" implementation provides the list of "files names" as a array of char*.

(我的“文件系统”实现以char *数组形式提供“文件名”列表。)

Is there any Windows function or any source code that implements this file name matching?

(是否有Windows功能或实现此文件名匹配的任何源代码?)

  ask by harper translate from so

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
629 views
Welcome To Ask or Share your Answers For Others

1 Answer

For wildcard name matching using '*' and '?'

(对于使用'*'和'?'的通配符名称匹配)

try this (if you want to avoid boost, use std::tr1::regex):

(试试看(如果您想避免升压,请使用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, "/", "\/");
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...