Какое регулярное выражение соответствует всем файлам, которые заканчиваются на «.txt», используя библиотеки std::regex или boost::regex?

#c #regex #std

Вопрос:

Я просматриваю какой-то каталог и хочу распечатать все файлы, которые заканчиваются на .txt. Этот код не работает.
ft::Путь к файлу Путь к файлу; std::файловая система::recursive_directory_iterator iter(m_rootDirectoryPath);

     const std::regex e("*.txt");

    for(;iter != std::filesystem::end(iter);   iter)
    {
        if(std::regex_match(iter->path().string(),e))
        {
            const std::stringamp; p = iter->path().string();
            uint64_t pos = p.find(m_rootDirectoryPath.string());
            filePath.set_path(p.substr(pos   m_rootDirectoryPath.string().size()));
            writer->Write(filePath);
        }
    }
 

Какое регулярное выражение соответствует всем файлам, которые заканчиваются на .txt? (вы должны предположить, что я использую std::регулярное выражение для сопоставления шаблонов)

Комментарии:

1. Не по теме, но… если шаблон настолько прост, его, возможно, лучше использовать std::filesystem::path::extension , а не регулярное выражение.

2. Да, но я пишу функцию, которая возвращает вектор файлов, соответствующих определенному регулярному выражению. Я просто хотел проверить эту функцию, но я вообще не знаю регулярного выражения.

Ответ №1:

 ".*\.txt$"
 

Ваше выражение-это шарик, используемый в оболочках.

Ответ №2:

Привет, регулярное выражение, которое вы ищете, это R"(.*.txt$)"

 #include <vector>
#include <regex>
#include <string>
#include <iostream>


int main(int argc, char* argv[]) {
    const std::regex e{R"(.*.txt)"};
    const std::vector<std::string> files{{"toto.txt", "titi.doc", "tata.txt", "txt"}};

    for(const autoamp; str : files)
    {
        if(std::regex_match(str, e))
        {
            std::cout << str << 'n';
        }
    }
    
    std::cout.flush();
}
 

Обратите внимание, что:

  • вы можете протестировать регулярное выражение на следующем сайте: https://regex101.com
  • если вы изучаете C 20, вы можете использовать ends_with
  • путь к файловой системе имеет метод extension

Комментарии:

1. Нет, это ссылка на синтаксис C 11 R , которая позволяет избежать двойного