我需要匹配简单的一些只包含*和?的简单glob模式。在我看来,我可以将输入模式转换为正则表达式 - 唯一的问题是我不熟悉regexp足以知道替换。
基本上,我需要一个实现:
std::string getRexExpForGlob(const std::string& globPattern);
请注意,这些匹配不用于与文件系统有关的任何内容,因此POSIX glob不会这样做。
答案 0 :(得分:2)
*
相当于正则表达式中的.*
。 ?
相当于.
。在大多数正则表达式方言中,.
默认情况下与换行符不匹配,因此如果您需要它来匹配该字符,请检查您的库以了解如何设置该标志。
答案 1 :(得分:2)
根据您的操作系统,<fnmatch>
可能会int fnmatch(const char* pattern, const char* string, int flags)
。这允许针对任意字符串的glob模式,以及一些额外的标志,以允许超出文件名匹配所需的灵活性。
否则,glob的*
和?
分别等同于regexp .*
和.
。 (Globs也可以有[]替代品,但你已经说过你没有)。
答案 2 :(得分:1)
在正则表达式中,.
表示任何单个字符。这将以glob模式映射到?
。同样,.*
表示任何字符序列,在glob模式中映射到*
。你应该能够从中编写一个可行的函数。