#c #boost
#c #boost
Вопрос:
Это мой код:
path Path = "e:\Documents\";
boost::regex reg("(*.pdf)");
for(recursive_directory_iterator it(Path); it != recursive_directory_iterator(); it)
{
if(boost::regex_search(it->string(), reg))
{
cout << *it << endl;
}
}
Но я всегда получаю ошибку и прерываю () в Visual Studio, после запуска программы проблема в этой строке:
boost::regex reg("(*.pdf)");
Я не объявляю объект regex хорошим?
Ответ №1:
*.pdf
это не регулярное выражение, это большой размер (для сопоставления файлов). Вам нужно
boost::regex reg("(.*\.pdf)");
.
: соответствует любому символу*
: 0 или более предыдущих совпадений\
: чтобы создать один
Комментарии:
1. Спасибо, я думал, что это будет работать так же, как в Linux, теперь все работает хорошо
2. Это стандартное регулярное выражение, такое же, как когда требуется регулярное выражение в Linux. В терминале в командной строке вы должны указывать большой размер, а не регулярное выражение. Для grep соответствующим аргументом является регулярное выражение, поэтому вы вводите
grep <regex> <file glob>
3. Я запутался, почему вы используете 2 из «» там, но я вижу, что это работает и с одним
4. Это потому, что
.
соответствует любому символу, включая фактический.
. Оно также будет соответствовать filename-pdf, filename pdf и т.д. Если вы хотите только сопоставить filename.pdf, используйте\.