2010-11-11 48 views
2

我需要匹配简单的一些包含*和?的简单glob模式。我想到我可以将输入模式转换为正则表达式 - 唯一的问题是我不熟悉正则表达式足以了解替换。如何使用regexp在C/C++中执行glob(Linux)

从本质上讲,我需要一个实现:

std::string getRexExpForGlob(const std::string& globPattern); 

注意这些比赛不用于任何与文件系统,所以POSIX水珠不会做。

回答

2

根据您的操作系统,您可能有<fnmatch>int fnmatch(const char* pattern, const char* string, int flags)。这允许针对任意字符串的glob模式,以及一些额外的标志,以允许超出文件名匹配所需的灵活性。

否则,glob的*?分别等同于正则表达式.*.。 (Globs也可以有[]替代品,但是你说过你没有)。

+0

此解决方案是最简单的,谢谢(fnmatch在我的系统上很好)。 – Justicle 2010-11-11 02:01:03

2

*以glob模式相当于.*正则表达式。 ?相当于.。在大多数正则表达式中,.默认情况下与换行符不匹配,所以如果您需要它匹配该字符,请检查您的库是如何设置该标志的。

1

在正则表达式中,.表示任何单个字符。这以全局模式映射到?。类似地,.*表示任何字符序列,其以全局模式映射到*。你应该能够从中编写一个可行的功能。