如何使用正则表达式在C / C ++中执行glob(Linux)

时间:2010-11-11 01:03:33

标签: c++ regex glob

我需要匹配简单的一些只包含*和?的简单glob模式。在我看来,我可以将输入模式转换为正则表达式 - 唯一的问题是我不熟悉regexp足以知道替换。

基本上,我需要一个实现:

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

请注意,这些匹配不用于与文件系统有关的任何内容,因此POSIX glob不会这样做。

3 个答案:

答案 0 :(得分:2)

glob模式中的

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

答案 1 :(得分:2)

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

否则,glob的*?分别等同于regexp .*.。 (Globs也可以有[]替代品,但你已经说过你没有)。

答案 2 :(得分:1)

在正则表达式中,.表示任何单个字符。这将以glob模式映射到?。同样,.*表示任何字符序列,在glob模式中映射到*。你应该能够从中编写一个可行的函数。