Este regex não funciona em c ++

Supõe-se que combine "abababab" já que "ab" é repetido mais de duas vezes consecutivamente, mas o código não está imprimindo nenhuma saída. Existe algum outro truque no uso de regex em C ++.

Eu tentei com outras linguagens e funciona muito bem.

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

Seu problema é que suas barras invertidas estão escapando do ‘1’ em sua string. Você precisa informar std :: regex para tratá-los como ‘\’ s. Você pode fazer isso usando uma string RA “((. +) \ 1 \ 1+)”, ou escapando das barras, como mostrado aqui:

 #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 produz a saída

 abababab ab