Ваша проблема заключается в том, что ваши обратные косые черты избегают «1» в вашей строке. Вам нужно сообщить std :: regex, чтобы считать их «\». Вы можете сделать это, используя необработанную строку R "((. +) \ 1 \ 1+)" или путем сбрасывания косых черт, как показано здесь:
#include <regex>
#include <string>
#include <iostream>
int main(){
std::string s ("xaxababababaxax");
std::smatch m;
std::regex e ("(.+)\\1\\1+");
while (std::regex_search (s,m,e)) {
for (auto x:m) std::cout << x << " ";
std::cout << std::endl;
s = m.suffix().str();
}
return 0;
}
Который производит выход
abababab ab