#include <iostream>
#include <numeric>
#include <regex>
#include <string>
#include <vector>
using namespace std;
int main() {
const auto first = "Somebody"s;
const auto second = "words"s;
const vector<string> words = { "in"s, "lorem"s, "ipsum"s };
const auto input = "Somebody has typed in some words here."s;
const regex re("\\b" + first + accumulate(next(cbegin(words)), cend(words), "\\b(?:(\\b" + words.front(), [](const auto& lhs, const auto& rhs) { return lhs + "\\b|\\b" + rhs; }) + "\\b).*|.)*?\\b" + second + "\\b");
smatch sm;
if (regex_search(input, sm, re) && sm[1].length() == 0U) {
cout << "match\n";
} else {
cout << "not a match\n";
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bnVtZXJpYz4KI2luY2x1ZGUgPHJlZ2V4PgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBtYWluKCkgewoJY29uc3QgYXV0byBmaXJzdCA9ICJTb21lYm9keSJzOwoJY29uc3QgYXV0byBzZWNvbmQgPSAid29yZHMiczsKCWNvbnN0IHZlY3RvcjxzdHJpbmc+IHdvcmRzID0geyAiaW4icywgImxvcmVtInMsICJpcHN1bSJzIH07Cgljb25zdCBhdXRvIGlucHV0ID0gIlNvbWVib2R5IGhhcyB0eXBlZCBpbiBzb21lIHdvcmRzIGhlcmUuInM7Cgljb25zdCByZWdleCByZSgiXFxiIiArIGZpcnN0ICsgYWNjdW11bGF0ZShuZXh0KGNiZWdpbih3b3JkcykpLCBjZW5kKHdvcmRzKSwgIlxcYig/OihcXGIiICsgd29yZHMuZnJvbnQoKSwgW10oY29uc3QgYXV0byYgbGhzLCBjb25zdCBhdXRvJiByaHMpIHsgcmV0dXJuIGxocyArICJcXGJ8XFxiIiArIHJoczsgfSkgKyAiXFxiKS4qfC4pKj9cXGIiICsgc2Vjb25kICsgIlxcYiIpOwoJc21hdGNoIHNtOwoKCWlmIChyZWdleF9zZWFyY2goaW5wdXQsIHNtLCByZSkgJiYgc21bMV0ubGVuZ3RoKCkgPT0gMFUpIHsKCQljb3V0IDw8ICJtYXRjaFxuIjsKCX0gZWxzZSB7CgkJY291dCA8PCAibm90IGEgbWF0Y2hcbiI7Cgl9Cn0=