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++。