#include <iostream>
#include <iterator>
#include <string>
#include <regex>
void test(std::string const& data)
{
std::cout << "Input string: " << data << std::endl;
std::regex reg("((pi|e|x|([-]?[0-9]*[.]?[0-9]+)){2,})");
auto tokens_begin = std::sregex_iterator(data.begin(), data.end(), reg);
auto tokens_end = std::sregex_iterator();
for (std::sregex_iterator i = tokens_begin; i != tokens_end; ++i)
{
std::smatch match = *i;
std::string match_str = match.str();
std::cout << "Match: " << match_str << '\n';
}
std::cout << std::endl;
}
int main()
{
test("piex14.3");
test("14e");
test("12.5pi");
test("ex");
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aXRlcmF0b3I+CiNpbmNsdWRlIDxzdHJpbmc+CiNpbmNsdWRlIDxyZWdleD4KCnZvaWQgdGVzdChzdGQ6OnN0cmluZyBjb25zdCYgZGF0YSkKewogICBzdGQ6OmNvdXQgPDwgIklucHV0IHN0cmluZzogIiA8PCBkYXRhIDw8IHN0ZDo6ZW5kbDsKCiAgIHN0ZDo6cmVnZXggcmVnKCIoKHBpfGV8eHwoWy1dP1swLTldKlsuXT9bMC05XSspKXsyLH0pIik7CiAgIGF1dG8gdG9rZW5zX2JlZ2luID0gc3RkOjpzcmVnZXhfaXRlcmF0b3IoZGF0YS5iZWdpbigpLCBkYXRhLmVuZCgpLCByZWcpOwogICBhdXRvIHRva2Vuc19lbmQgPSBzdGQ6OnNyZWdleF9pdGVyYXRvcigpOwogICBmb3IgKHN0ZDo6c3JlZ2V4X2l0ZXJhdG9yIGkgPSB0b2tlbnNfYmVnaW47IGkgIT0gdG9rZW5zX2VuZDsgKytpKQogICB7CiAgICAgIHN0ZDo6c21hdGNoIG1hdGNoID0gKmk7CiAgICAgIHN0ZDo6c3RyaW5nIG1hdGNoX3N0ciA9IG1hdGNoLnN0cigpOwogICAgICBzdGQ6OmNvdXQgPDwgIk1hdGNoOiAgIiA8PCBtYXRjaF9zdHIgPDwgJ1xuJzsKICAgfQoKICAgc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKfQoKaW50IG1haW4oKQp7CiAgIHRlc3QoInBpZXgxNC4zIik7CiAgIHRlc3QoIjE0ZSIpOwogICB0ZXN0KCIxMi41cGkiKTsKICAgdGVzdCgiZXgiKTsKfQo=