Esta expresión regular no funciona en C ++

Se supone que debe coincidir con "abababab" ya que "ab" se repite más de dos veces consecutivas, pero el código no imprime ningún resultado. ¿Hay algún otro truco en el uso de expresiones regulares en C ++?

Intenté con otros idiomas y funciona muy bien.

 #include 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; } 

Tu problema es que tus barras invertidas están escapando del ‘1’ en tu cadena. Debe informar a std :: regex para tratarlos como ‘\’ ‘s. Puedes hacer esto usando una cadena cruda R “((. +) \ 1 \ 1+)”, o escapando de las barras inclinadas, como se muestra aquí:

 #include  #include  #include  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; } 

Que produce la salida

 abababab ab