Я использую boost 1.67.0 regex , чтобы найти подходящие имена файлов в текущей папке, используя следующий фрагмент
boost::filesystem::path p(".");
if(is_directory(p)) {
for(auto& entry : boost::make_iterator_range(boost::filesystem::directory_iterator(p), {})){
std::stringstream ss;
ss << entry;
std::string filename = ss.str();
std::cout << filename << std::endl;
boost::regex pattern("some_\\d+_file\.txt");
if(boost::regex_match(filename, pattern)){
std::cout << "matched" << filename << std::endl;
}
}
}
Содержимое текущего каталога, созданного строкой std::cout << filename << std::endl;
:
"./myApp.out"
"./some_0_file.txt"
"./some_1_file.txt"
"./other_file.txt"
"./some_other_file.txt"
"./some_2_file.txt"
Чтобы подтвердить, что мое совпадающее выражение является правильным, я обратился к Синтаксис регулярного выражения Perl . Также подтвердил это с помощью RegEx101.com , вывод правильно показывает 3 совпадения следующим образом:
some_0_file.txt
some_1_file.txt
some_2.file.txt
Вопрос
Что-то не так с моим фрагментом или RegEx? Почему boost::regex_match
дает 0 совпадений?
Что я пропустил?