我需要匹配简单的一些包含*和?的简单glob模式。我想到我可以将输入模式转换为正则表达式 - 唯一的问题是我不熟悉正则表达式足以了解替换。如何使用regexp在C/C++中执行glob(Linux)
从本质上讲,我需要一个实现:
std::string getRexExpForGlob(const std::string& globPattern);
注意这些比赛不用于任何与文件系统,所以POSIX水珠不会做。
我需要匹配简单的一些包含*和?的简单glob模式。我想到我可以将输入模式转换为正则表达式 - 唯一的问题是我不熟悉正则表达式足以了解替换。如何使用regexp在C/C++中执行glob(Linux)
从本质上讲,我需要一个实现:
std::string getRexExpForGlob(const std::string& globPattern);
注意这些比赛不用于任何与文件系统,所以POSIX水珠不会做。
根据您的操作系统,您可能有<fnmatch>
和int fnmatch(const char* pattern, const char* string, int flags)
。这允许针对任意字符串的glob模式,以及一些额外的标志,以允许超出文件名匹配所需的灵活性。
否则,glob的*
和?
分别等同于正则表达式.*
和.
。 (Globs也可以有[]替代品,但是你说过你没有)。
*
以glob模式相当于.*
正则表达式。 ?
相当于.
。在大多数正则表达式中,.
默认情况下与换行符不匹配,所以如果您需要它匹配该字符,请检查您的库是如何设置该标志的。
在正则表达式中,.
表示任何单个字符。这以全局模式映射到?
。类似地,.*
表示任何字符序列,其以全局模式映射到*
。你应该能够从中编写一个可行的功能。
此解决方案是最简单的,谢谢(fnmatch在我的系统上很好)。 – Justicle 2010-11-11 02:01:03