Thursday 14 January 2021

File name wildcards

Earlier I was working on a command line utility that needed to take a list of potentially wildcarded files as input. I didn't want a fully blown regular expression as the input, just the normal ? and * options.

I decided that the quickest way to do this was to convert the wildcarded filename to a regular expression and then use the STL std::regex to do the matching.

Here is a quick way to do it.

#pragma once #include <regex> #include <string> inline std::regex convert_file_wildcards_to_regex(std::string file_pattern) { std::string pattern; for (auto c : file_pattern) { switch (c) { default: pattern += c; break; case '.': pattern += "\\."; break; case '\\': pattern += "\\\\"; break; case '?': pattern += "."; break; case '*': pattern += ".*"; break; } } return std::regex(pattern, std::regex_constants::ECMAScript | std::regex_constants::icase); }