我需要搜索与某些模式匹配的文件,这些模式类似于使用glob
以boost
样式在命令行上给出的模式。
例如:
如果输入为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样式解释模式吗?
我之前没有使用过增强功能 有帮助吗?感谢。
答案 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通配符,但它会处理最常见的通配符。
希望这有帮助。