I need to match simple some simple glob patterns that include only * and ?. It occurred to me that I could transform the input pattern into a regexp - the only problem is I'm not familiar with regexp enough to know the replacements.
Essentially, I need an implementation for:
std::string getRexExpForGlob(const std::string& globPattern);
Note these matches aren't used for anything to do with the filesystem, so POSIX glob won't do.
Depending on your OS, you may have <fnmatch>
with int fnmatch(const char* pattern, const char* string, int flags)
. This allows glob patterns against arbitrary strings, and a few extra flags to allow flexibility beyond that needed for filename matching.
Otherwise, glob's *
and ?
are equivalent to regexp .*
and .
respectively. (Globs can also have [] alternatives but you've said yours don't).