#include <string>
#include <iostream>
#include <regex>
using namespace std;
int main() {
std::regex r(R"((\$*[A-Z][A-Z\d_]*)\s*=\s*((?:(?![A-Z]\d+\.\d+|[A-Z][A-Z\d_]*\s*=).)*))");
std::string s = "N100$VAR1=100+$Var2*30 + #29X=30.99Z=(#991+ ( 30*SIN(60) + $VAR32 ) / #32)";
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() << '\n';
std::cout << " Capture: " << m[1].str() << '\n';
std::cout << " Capture: " << m[2].str() << '\n';
}
return 0;
}
I2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8cmVnZXg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpIHsKCXN0ZDo6cmVnZXggcihSIigoXCQqW0EtWl1bQS1aXGRfXSopXHMqPVxzKigoPzooPyFbQS1aXVxkK1wuXGQrfFtBLVpdW0EtWlxkX10qXHMqPSkuKSopKSIpOwoJc3RkOjpzdHJpbmcgcyA9ICJOMTAwJFZBUjE9MTAwKyRWYXIyKjMwICsgIzI5WD0zMC45OVo9KCM5OTErICggMzAqU0lOKDYwKSArICRWQVIzMiApIC8gIzMyKSI7Cglmb3Ioc3RkOjpzcmVnZXhfaXRlcmF0b3IgaSA9IHN0ZDo6c3JlZ2V4X2l0ZXJhdG9yKHMuYmVnaW4oKSwgcy5lbmQoKSwgcik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSAhPSBzdGQ6OnNyZWdleF9pdGVyYXRvcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICsraSkKICAgIHsKICAgICAgICBzdGQ6OnNtYXRjaCBtID0gKmk7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJNYXRjaCB2YWx1ZTogIiA8PCBtLnN0cigpICAgICAgPDwgJ1xuJzsKICAgICAgICBzdGQ6OmNvdXQgPDwgIiAgICBDYXB0dXJlOiAiIDw8IG1bMV0uc3RyKCkgICA8PCAnXG4nOwogICAgICAgIHN0ZDo6Y291dCA8PCAiICAgIENhcHR1cmU6ICIgPDwgbVsyXS5zdHIoKSAgIDw8ICdcbic7CiAgICB9CglyZXR1cm4gMDsKfQo=