#include <string>
#include <iostream>
#include <regex>
using namespace std;
int main() {
std::regex r(R"(\{\{([^}]*(?:}(?!})[^}]*)*)\}\})");
std::string s = "{{name1 | filter1|filter2 |filter3}}";
for(std::sregex_iterator i = std::sregex_iterator(s.begin(), s.end(), r);
i != std::sregex_iterator();
++i)
{
std::smatch m = *i;
std::cout << "Match value: " << m.str() << " at Position " << m.position() << '\n';
std::cout << " Capture: " << m[1].str() << " at Position " << m.position(1) << '\n';
}
return 0;
}
I2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8cmVnZXg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpIHsKCXN0ZDo6cmVnZXggcihSIihce1x7KFtefV0qKD86fSg/IX0pW159XSopKilcfVx9KSIpOwoJc3RkOjpzdHJpbmcgcyA9ICJ7e25hbWUxIHwgZmlsdGVyMXxmaWx0ZXIyIHxmaWx0ZXIzfX0iOwoJZm9yKHN0ZDo6c3JlZ2V4X2l0ZXJhdG9yIGkgPSBzdGQ6OnNyZWdleF9pdGVyYXRvcihzLmJlZ2luKCksIHMuZW5kKCksIHIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgIT0gc3RkOjpzcmVnZXhfaXRlcmF0b3IoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK2kpCiAgICB7CiAgICAgICAgc3RkOjpzbWF0Y2ggbSA9ICppOwogICAgICAgIHN0ZDo6Y291dCA8PCAiTWF0Y2ggdmFsdWU6ICIgPDwgbS5zdHIoKSA8PCAiIGF0IFBvc2l0aW9uICIgPDwgbS5wb3NpdGlvbigpIDw8ICdcbic7CiAgICAgICAgc3RkOjpjb3V0IDw8ICIgICAgQ2FwdHVyZTogIiA8PCBtWzFdLnN0cigpIDw8ICIgYXQgUG9zaXRpb24gIiA8PCBtLnBvc2l0aW9uKDEpIDw8ICdcbic7CiAgICB9CglyZXR1cm4gMDsKfQo=