全球风格的正则表达式模式匹配使用提升

时间:2014-01-08 14:57:17

标签: c++ regex boost glob

我需要搜索与某些模式匹配的文件,这些模式类似于使用globboost样式在命令行上给出的模式。

例如:
如果输入为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样式中的任何vaild正则表达式,因为它是为命令行实用程序提供的。

在boost中有什么方法可以用glob样式解释模式吗?

我之前没有使用过增强功能 有帮助吗?感谢。

2 个答案:

答案 0 :(得分:1)

您可以尝试我的glob_match。 它不是Boost,而是C ++。

答案 1 :(得分:0)

由于通配符与正则表达式中相同字符的含义不同,因此您必须从翻译模式开始。

首先替换所有'。'来做到这一点。用“\。”。然后将所有'*'替换为“。*”并将所有'?'替换为'?'用'。' (当然没有单引号和双引号;)。

这是我以前用过的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);
    }

它不会处理所有的glob通配符,但它会处理最常见的通配符。

希望这有帮助。