#include <iostream>
#include <regex>
#include <string>
//#include <sstream>
//#include <algorithm>
int main( )
{
std:: string input_text = "my text\n begin foo even 14 spaces and maybe \n new line(\n some text only replace foo foo bar foo, keep the rest\n )\n some more text not replace foo here" ;
std:: regex re( R"((begin[^(]*)(\([^)]*\)))" ) ;
std:: regex rxReplace( R"(\b foo\b )" ) ;
std:: string output_text;
auto callback = [ & ] ( std:: string const & m) {
//std::istringstream iss(m);
std:: smatch smtch;
if ( regex_search( m, smtch, re) ) {
output_text + = smtch[ 1 ] .str ( ) ;
output_text + = std:: regex_replace ( smtch[ 2 ] .str ( ) .c_str ( ) , rxReplace, "abc" ) ;
} else {
output_text + = m;
}
} ;
std:: sregex_token_iterator
begin( input_text.begin ( ) , input_text.end ( ) , re, { - 1 ,0 } ) ,
end;
std:: for_each ( begin,end,callback) ;
std:: cout << output_text;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8cmVnZXg+CiNpbmNsdWRlIDxzdHJpbmc+Ci8vI2luY2x1ZGUgPHNzdHJlYW0+Ci8vI2luY2x1ZGUgPGFsZ29yaXRobT4KaW50IG1haW4oKQp7CiAgICBzdGQ6OnN0cmluZyBpbnB1dF90ZXh0ID0gIm15IHRleHRcbmJlZ2luIGZvbyBldmVuIDE0IHNwYWNlcyBhbmQgbWF5YmUgXG5uZXcgbGluZShcbnNvbWUgdGV4dCBvbmx5IHJlcGxhY2UgZm9vIGZvbyBiYXIgZm9vLCBrZWVwIHRoZSByZXN0XG4pXG5zb21lIG1vcmUgdGV4dCBub3QgcmVwbGFjZSBmb28gaGVyZSI7CiAgICBzdGQ6OnJlZ2V4IHJlKFIiKChiZWdpblteKF0qKShcKFteKV0qXCkpKSIpOwogICAgc3RkOjpyZWdleCByeFJlcGxhY2UoUiIoXGJmb29cYikiKTsKICAgIHN0ZDo6c3RyaW5nIG91dHB1dF90ZXh0OwogICAgYXV0byBjYWxsYmFjayA9IFsmXShzdGQ6OnN0cmluZyBjb25zdCYgbSl7CiAgICAgICAgLy9zdGQ6OmlzdHJpbmdzdHJlYW0gaXNzKG0pOwogICAgICAgIHN0ZDo6c21hdGNoIHNtdGNoOwogICAgICAgIGlmIChyZWdleF9zZWFyY2gobSwgc210Y2gsIHJlKSkgewoJCQlvdXRwdXRfdGV4dCArPSBzbXRjaFsxXS5zdHIoKTsKCQkJb3V0cHV0X3RleHQgKz0gc3RkOjpyZWdleF9yZXBsYWNlKHNtdGNoWzJdLnN0cigpLmNfc3RyKCksIHJ4UmVwbGFjZSwgImFiYyIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgCW91dHB1dF90ZXh0ICs9IG07CiAgICAgICAgfQogICAgfTsKCiAgICBzdGQ6OnNyZWdleF90b2tlbl9pdGVyYXRvcgogICAgICAgIGJlZ2luKGlucHV0X3RleHQuYmVnaW4oKSwgaW5wdXRfdGV4dC5lbmQoKSwgcmUsIHstMSwwfSksCiAgICAgICAgZW5kOwogICAgc3RkOjpmb3JfZWFjaChiZWdpbixlbmQsY2FsbGJhY2spOwoKICAgIHN0ZDo6Y291dCA8PCBvdXRwdXRfdGV4dDsKICAgIHJldHVybiAwOwp9