40absl::Status
Match(std::string_view pattern, std::vector<std::string>* result,
43 const auto search_dir = fs::path(
SV_ABSL_TO_STD(pattern)).parent_path();
44 const auto filename = fs::path(
SV_ABSL_TO_STD(pattern)).filename().string();
45 std::string regexp_filename =
46 absl::StrReplaceAll(filename, {{
".",
"\\."}, {
"*",
".*"}, {
"?",
"."}});
47 std::regex regexp_pattern(regexp_filename);
48 std::error_code error;
50 const fs::directory_iterator path_end;
51 for (
auto path = fs::directory_iterator(search_dir, error);
52 !error && path != path_end; path.increment(error)) {
53 if (!fs::is_regular_file(path->path())) {
56 if (std::regex_match(path->path().filename().string(), regexp_pattern)) {
57 result->push_back(path->path().string());
61 return absl::InvalidArgumentError(error.message());
64 std::sort(result->begin(), result->end());
65 return absl::OkStatus();
66 }
catch (
const std::exception& e) {
67 return absl::InvalidArgumentError(e.what());