"path/file.cpp";
std::regex re("^.*(?!.cpp)$",std::regex::ECMAScript);
return std::regex_match(line.begin(), line.end(), re);
возвращает true
почему?
что вообще ожидается от этой регулярки?
То, что строчка не будет оканчиваться на .cpp
Вам нужен lookbehind, а у вас lookahead
так по идее не важно же должно быть. Либа с++ не поддерживает любой lookbehind
"^(?!.*\\.cpp$).*$"
Блин, чёт я не понимаю. Работает, но почему нужно весь матч в lookahead пихать?
https://regex101.com/ дебагером пройдись, узнаешь
Вообще, почему бы не взять std::filesystem и проверять расширение файла вместо использования регулярки?
Так надо для функции травёрса
не смог я там ни на одном движке заматчить этот паттерн
Тебе нужно просто чтобы строка не заканчивалась на .cpp ?
Кратко, да Мне надо на самом деле два регекса Первый проверяет что строка заканчивается на XXX Второй проверяет что строка НЕ заканчивается на XXX
так проверить, что заканчивается, и взять !
Дело в том, что тут в регвыражениях проблема взмаха крыла бабочки. Простое НЕ в условии очень сильно меняет сложность выражения (до почти невозможности) Так что просто не надо писать такие регвыражения
Обсуждают сегодня