Неожиданное поведение boost::find_all_regex?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Неожиданное поведение boost::find_all_regex?

Сообщение Anonymous »

Должен ли boost::find_all_regex соответствовать двум перекрывающимся словам, как в примере ниже? Насколько я проверял, для строки «twonetwo» (обратите внимание на перекрытие «one») и регулярного выражения R»(one|two)» сопоставляются только два слова «two». Следующий тест с версией Boost 1.83 дает результат {"два", "два", но я ожидаю получить {"два", "один", "два". Чего мне не хватает?
TEST_CASE("find_all_regex") {

std::vector expected_res = {"two", "one", "two"};
std::vector res;
std::string data = "twonetwo";

SECTION("Boost find_all_regex") {
boost::regex r{R"(one|two)"};
boost::find_all_regex(res, data, r);
REQUIRE(res == expected_res); // Fails with boost version 1.83
}

SECTION("My implementation of find_all_regex") {

std::regex r{R"(one|two)"};
res = find_all_regex(data, r);
REQUIRE(res == expected_res);
}
}

Моя работа заключалась в реализации моей собственной версии (без использования boost) с помощью только стандартного регулярного выражения:
std::vector find_all_regex(std::string line, std::regex r) {
std::vector res;
std::smatch match;
std::string copy_line = line;
while (std::regex_search(copy_line, match, r)) {
res.push_back(match.str(0));

if (match.str(0).length() != 1) {
copy_line = match.str(0).back() + match.suffix().str();
} else {
copy_line = match.suffix().str();
}

}
return res;
}


Подробнее здесь: https://stackoverflow.com/questions/798 ... -all-regex
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»