C++ 使用boost的Glob样式正则表达式模式匹配

C++ 使用boost的Glob样式正则表达式模式匹配,c++,regex,boost,glob,C++,Regex,Boost,Glob,我需要使用boost搜索与命令行glob样式中给出的模式类似的模式匹配的文件 例如: 如果输入是myFiles*.c它应该与文件myFiles.c、myFiles1.c、myFiles123.c等匹配 尝试将boost::regex_match与perl模式结合使用。但是我必须将输入模式设置为myfiles.*.c,而不是myfiles.*.c。我可以识别myfiles*.c并将其翻译成myfiles.*.c并在perl模式下将其交给boost::regex_match。但是输入模式可以是glo

我需要使用
boost
搜索与命令行
glob
样式中给出的模式类似的模式匹配的文件

例如:
如果输入是
myFiles*.c
它应该与文件
myFiles.c、myFiles1.c、myFiles123.c
等匹配

尝试将
boost::regex_match
perl
模式结合使用。但是我必须将输入模式设置为
myfiles.*.c
,而不是
myfiles.*.c
。我可以识别
myfiles*.c
并将其翻译成
myfiles.*.c
并在perl模式下将其交给
boost::regex_match
。但是输入模式可以是glob样式的任何可用正则表达式,因为它是为命令行实用程序提供的

boost中是否有任何方法可以用glob风格解释模式

我以前从未使用过boost。

有什么帮助吗?谢谢。

由于通配符与正则表达式中相同字符的含义不同,因此您必须首先转换模式

为此,请首先将所有“.”替换为“\”。然后,将所有的“*”替换为“*”,最后的所有“?”替换为“.”(当然不包括单引号和双引号;)

这是我以前使用过的一个C#函数。这可能会让你知道我在说什么

    private bool FNMatch(string fileName, string fileMask)
    {
        if (fileMask == "*.*" || fileMask == "*")
            return true;

        Regex mask = new Regex(
            '^' +
            fileMask
                .Replace(@".", @"\.")
                .Replace(@"*", @".*")
                .Replace(@"?", @".")
            + '$',
            RegexOptions.IgnoreCase);
        return mask.IsMatch(fileName);
    }
它不会处理所有的全局通配符,但会处理最常见的通配符

希望这有帮助。

你可以试试我的。 它不是助推,而是C++。