#include <iostream>
#include <regex>
#include <string>
using namespace std;
std::string replaceWord(std::string &str, std::string& search, std::string& replace)
{
// Escape the literal regex pattern
search = std::regex_replace(search, std::regex(R"([.^$|{}()[\]*+?/\\])"), std::string(R"(\$&)"));
// Escape the literal replacement pattern
replace = std::regex_replace(replace, std::regex("[$]"), std::string("$$$$"));
std::regex e("(\\W|^)("+search+")(?!\\w)");
return std::regex_replace(str, e, std::string("$1") + replace);
}
int main() {
std::string text("String toReplace()");
std::string s("toReplace()");
std::string r("theReplacement()");
std::cout << replaceWord(text, s, r);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8cmVnZXg+CiNpbmNsdWRlIDxzdHJpbmc+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdGQ6OnN0cmluZyByZXBsYWNlV29yZChzdGQ6OnN0cmluZyAmc3RyLCBzdGQ6OnN0cmluZyYgc2VhcmNoLCBzdGQ6OnN0cmluZyYgcmVwbGFjZSkKewoJLy8gRXNjYXBlIHRoZSBsaXRlcmFsIHJlZ2V4IHBhdHRlcm4KICAgIHNlYXJjaCA9IHN0ZDo6cmVnZXhfcmVwbGFjZShzZWFyY2gsIHN0ZDo6cmVnZXgoUiIoWy5eJHx7fSgpW1xdKis/L1xcXSkiKSwgc3RkOjpzdHJpbmcoUiIoXCQmKSIpKTsKICAgIC8vIEVzY2FwZSB0aGUgbGl0ZXJhbCByZXBsYWNlbWVudCBwYXR0ZXJuCiAgICByZXBsYWNlID0gc3RkOjpyZWdleF9yZXBsYWNlKHJlcGxhY2UsIHN0ZDo6cmVnZXgoIlskXSIpLCBzdGQ6OnN0cmluZygiJCQkJCIpKTsKICAgIHN0ZDo6cmVnZXggZSgiKFxcV3xeKSgiK3NlYXJjaCsiKSg/IVxcdykiKTsKICAgIHJldHVybiBzdGQ6OnJlZ2V4X3JlcGxhY2Uoc3RyLCBlLCBzdGQ6OnN0cmluZygiJDEiKSArIHJlcGxhY2UpOwp9CgppbnQgbWFpbigpIHsKCXN0ZDo6c3RyaW5nIHRleHQoIlN0cmluZyB0b1JlcGxhY2UoKSIpOwoJc3RkOjpzdHJpbmcgcygidG9SZXBsYWNlKCkiKTsKCXN0ZDo6c3RyaW5nIHIoInRoZVJlcGxhY2VtZW50KCkiKTsKCXN0ZDo6Y291dCA8PCByZXBsYWNlV29yZCh0ZXh0LCBzLCByKTsJCglyZXR1cm4gMDsKfQ==