使用 boost 进行全局样式正则表达式模式匹配

use*_*089 5 c++ regex boost glob

我需要搜索与某些模式匹配的文件,该模式类似于glob使用boost.

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

尝试使用boost::regex_matchwithperl模式。但我必须将输入模式指定为 asmyfiles.*.c而不是myFiles*.c。我可以识别myfiles*.c它并将其翻译myFiles.*.cboost::regex_matchPerl 模式。但输入模式可以是 glob 样式中的任何有效正则表达式,因为它是为命令行实用程序给出的。

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

我之前没用过boost。
有什么帮助吗?谢谢。

Sam*_*han 1

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

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

这是我之前使用过的一个 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);
    }
Run Code Online (Sandbox Code Playgroud)

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

希望这可以帮助。