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.*.c为boost::regex_matchPerl 模式。但输入模式可以是 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);
}
Run Code Online (Sandbox Code Playgroud)
它不处理所有通配符,但会处理最常见的通配符。
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
3331 次 |
| 最近记录: |