#include <regex>
#include <string>
#include <iostream>
int main()
{
std::string line = "abcde";
{
const std::string RX_ION_TYPE("ab?|ab?(?:cd|dc)");
const auto regexType = std::regex::ECMAScript;
std::regex rx_ionType;
rx_ionType.assign(
"(" + RX_ION_TYPE + ")"
, regexType);
std::smatch match;
if (std::regex_search(line, match, rx_ionType))
{
for (int i = 0; i < match.size(); i++)
{
std::cout << "|" << match.str(i) << "|\n";
}
}
else
{
std::cout << "No match.\n";
}
}
{
const std::string RX_ION_TYPE("ab?(?:cd|dc)|ab?");
const auto regexType = std::regex::ECMAScript;
std::regex rx_ionType;
rx_ionType.assign(
"(" + RX_ION_TYPE + ")"
, regexType);
std::smatch match;
if (std::regex_search(line, match, rx_ionType))
{
for (int i = 0; i < match.size(); i++)
{
std::cout << "|" << match.str(i) << "|\n";
}
}
else
{
std::cout << "No match.\n";
}
}
{
const std::string RX_ION_TYPE("ab?(?:cd|dc)?");
const auto regexType = std::regex::ECMAScript;
std::regex rx_ionType;
rx_ionType.assign(
"(" + RX_ION_TYPE + ")"
, regexType);
std::smatch match;
if (std::regex_search(line, match, rx_ionType))
{
for (int i = 0; i < match.size(); i++)
{
std::cout << "|" << match.str(i) << "|\n";
}
}
else
{
std::cout << "No match.\n";
}
}
return 0;
}
I2luY2x1ZGUgPHJlZ2V4PgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8aW9zdHJlYW0+CgppbnQgbWFpbigpCnsKCXN0ZDo6c3RyaW5nIGxpbmUgPSAiYWJjZGUiOwogICAgewogICAgCWNvbnN0IHN0ZDo6c3RyaW5nIFJYX0lPTl9UWVBFKCJhYj98YWI/KD86Y2R8ZGMpIik7CiAgICAKICAgIAljb25zdCBhdXRvIHJlZ2V4VHlwZSA9IHN0ZDo6cmVnZXg6OkVDTUFTY3JpcHQ7CiAgICAKICAgIAlzdGQ6OnJlZ2V4IHJ4X2lvblR5cGU7CiAgICAKICAgIAlyeF9pb25UeXBlLmFzc2lnbigKICAgIAkJIigiICsgUlhfSU9OX1RZUEUgKyAiKSIKICAgIAkJLCByZWdleFR5cGUpOwogICAgCiAgICAJc3RkOjpzbWF0Y2ggbWF0Y2g7CiAgICAKICAgIAlpZiAoc3RkOjpyZWdleF9zZWFyY2gobGluZSwgbWF0Y2gsIHJ4X2lvblR5cGUpKQogICAgCXsKICAgIAkJZm9yIChpbnQgaSA9IDA7IGkgPCBtYXRjaC5zaXplKCk7IGkrKykKICAgIAkJewogICAgCQkJc3RkOjpjb3V0IDw8ICJ8IiA8PCBtYXRjaC5zdHIoaSkgPDwgInxcbiI7CiAgICAJCX0KICAgIAkJCiAgICAJfQogICAgCWVsc2UKICAgIAl7CiAgICAJCXN0ZDo6Y291dCA8PCAiTm8gbWF0Y2guXG4iOwogICAgCX0KICAgIH0KCiAgICB7CiAgICAJY29uc3Qgc3RkOjpzdHJpbmcgUlhfSU9OX1RZUEUoImFiPyg/OmNkfGRjKXxhYj8iKTsKICAgIAogICAgCWNvbnN0IGF1dG8gcmVnZXhUeXBlID0gc3RkOjpyZWdleDo6RUNNQVNjcmlwdDsKICAgIAogICAgCXN0ZDo6cmVnZXggcnhfaW9uVHlwZTsKICAgIAogICAgCXJ4X2lvblR5cGUuYXNzaWduKAogICAgCQkiKCIgKyBSWF9JT05fVFlQRSArICIpIgogICAgCQksIHJlZ2V4VHlwZSk7CiAgICAKICAgIAlzdGQ6OnNtYXRjaCBtYXRjaDsKICAgIAogICAgCWlmIChzdGQ6OnJlZ2V4X3NlYXJjaChsaW5lLCBtYXRjaCwgcnhfaW9uVHlwZSkpCiAgICAJewogICAgCQlmb3IgKGludCBpID0gMDsgaSA8IG1hdGNoLnNpemUoKTsgaSsrKQogICAgCQl7CiAgICAJCQlzdGQ6OmNvdXQgPDwgInwiIDw8IG1hdGNoLnN0cihpKSA8PCAifFxuIjsKICAgIAkJfQogICAgCQkKICAgIAl9CiAgICAJZWxzZQogICAgCXsKICAgIAkJc3RkOjpjb3V0IDw8ICJObyBtYXRjaC5cbiI7CiAgICAJfQoJfQoJewoJCWNvbnN0IHN0ZDo6c3RyaW5nIFJYX0lPTl9UWVBFKCJhYj8oPzpjZHxkYyk/Iik7CgoJCWNvbnN0IGF1dG8gcmVnZXhUeXBlID0gc3RkOjpyZWdleDo6RUNNQVNjcmlwdDsKCgkJc3RkOjpyZWdleCByeF9pb25UeXBlOwoKCQlyeF9pb25UeXBlLmFzc2lnbigKCQkJIigiICsgUlhfSU9OX1RZUEUgKyAiKSIKCQkJLCByZWdleFR5cGUpOwoKCQlzdGQ6OnNtYXRjaCBtYXRjaDsKCgkJaWYgKHN0ZDo6cmVnZXhfc2VhcmNoKGxpbmUsIG1hdGNoLCByeF9pb25UeXBlKSkKCQl7CgkJCWZvciAoaW50IGkgPSAwOyBpIDwgbWF0Y2guc2l6ZSgpOyBpKyspCgkJCXsKCQkJCXN0ZDo6Y291dCA8PCAifCIgPDwgbWF0Y2guc3RyKGkpIDw8ICJ8XG4iOwoJCQl9CgoJCX0KCQllbHNlCgkJewoJCQlzdGQ6OmNvdXQgPDwgIk5vIG1hdGNoLlxuIjsKCQl9Cgl9CgoJcmV0dXJuIDA7Cn0K