#include <iostream>
#include <iterator>
#include <regex>
#include <string>
#include <vector>
using namespace std;
int main() {
string input {"Again this is the example in which shall be searched"};
string first {"again"};
string second {"be"};
vector<string> words;
words.push_back("is");
words.push_back("the");
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.*).*|.)*?" + second + "\\b", regex_constants::icase);
smatch sm;
if (regex_search(input, sm, re) && sm[1].length() == 0U) {
cout << "match\n";
} else {
cout << "not a match\n";
}
return 0;
}
ICAgICAgICAgICAgI2luY2x1ZGUgPGlvc3RyZWFtPgogICAgICAgICAgICAjaW5jbHVkZSA8aXRlcmF0b3I+CiAgICAgICAgICAgICNpbmNsdWRlIDxyZWdleD4KICAgICAgICAgICAgI2luY2x1ZGUgPHN0cmluZz4KICAgICAgICAgICAgI2luY2x1ZGUgPHZlY3Rvcj4KICAgICAKICAgICAgICAgICAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKICAgICAKICAgICAgICAgICAgaW50IG1haW4oKSB7CiAgICAgICAgICAgIAlzdHJpbmcgaW5wdXQgeyJBZ2FpbiB0aGlzIGlzIHRoZSBleGFtcGxlIGluIHdoaWNoIHNoYWxsIGJlIHNlYXJjaGVkIn07CiAgICAgCiAgICAgICAgICAgIAlzdHJpbmcgZmlyc3QgeyJhZ2FpbiJ9OwogICAgICAgICAgICAJc3RyaW5nIHNlY29uZCB7ImJlIn07CiAgICAgCiAgICAgICAgICAgIAl2ZWN0b3I8c3RyaW5nPiB3b3JkczsKICAgICAgICAgICAgCXdvcmRzLnB1c2hfYmFjaygiaXMiKTsKICAgICAgICAgICAgCXdvcmRzLnB1c2hfYmFjaygidGhlIik7CiAgICAgCiAgICAgCiAgICAgICAgICAgIAljb25zdCByZWdleCByZSgiXFxiIiArIGZpcnN0ICsgYWNjdW11bGF0ZShuZXh0KGNiZWdpbih3b3JkcykpLCBjZW5kKHdvcmRzKSwgIlxcYig/OihcXGIiICsgd29yZHMuZnJvbnQoKSwgW10oY29uc3QgYXV0byYgbGhzLCBjb25zdCBhdXRvJiByaHMpIHsgcmV0dXJuIGxocyArICJcXGJ8XFxiIiArIHJoczsgfSkgKyAiXFxiLiopLip8LikqPyIgKyBzZWNvbmQgKyAiXFxiIiwgcmVnZXhfY29uc3RhbnRzOjppY2FzZSk7CiAgICAgICAgICAgIAlzbWF0Y2ggc207CiAgICAgCiAgICAgICAgICAgIAlpZiAocmVnZXhfc2VhcmNoKGlucHV0LCBzbSwgcmUpICYmIHNtWzFdLmxlbmd0aCgpID09IDBVKSB7CiAgICAgICAgICAgIAkgICAgY291dCA8PCAibWF0Y2hcbiI7CiAgICAgICAgICAgIAl9IGVsc2UgewogICAgICAgICAgICAJICAgIGNvdXQgPDwgIm5vdCBhIG1hdGNoXG4iOwogICAgICAgICAgICAJfQogICAgICAgICAgICAJcmV0dXJuIDA7CiAgICAgICAgICAgIH0=