У меня нелепые трудности с сопоставлением регулярного выражения и заменой совпадения другой строкой. Я хочу добиться этого с помощью итераторов, как описано ниже. Часть, которая не работает, - это получение итераторов, которые разграничивают совпадение в исходной строке, и я мог бы затем перейти к string :: replace. Я попытался использовать объект std :: match_results, чтобы получить пару итераторов, но замена m
на mr
в вызове regex_search не удалась.
У меня смутное ощущение, что я либо использую неправильное совпадение класс или неправильный тип итератора, но почему-то не могу выбраться из джунглей шаблонов.
std::string txt{ "aaa bbb" };
std::smatch m;
std::regex rx(R"(aaa)");
std::match_results<std::string::iterator> mr;
if (std::regex_search(cbegin(txt), cend(txt), m, rx)) {
std::cerr << m[0] << std::endl;
// what I need here are iterators that I can pass
// to string::replace
// txt.replace(i1 ,i2, std::string("ccc"));
}