是否有一种很好且优雅的方式(可能使用 boost::algorithm::replace?)来替换字符串中所有出现的字符 - 除非前面有反斜杠?
以便
std::string s1("hello 'world'");
my_replace(s1, "'", "''"); // s1 becomes "hello ''world''"
std::string s2("hello \\'world'"); // note: only a single backslash in the string
my_replace(s2, "'", "''"); // s2 becomes "hello \\'world''"
使用 boost::regex,这可以使用:
std::string my_replace (std::string s, std::string search, std::string format) {
boost::regex e("([^\\\\])" + search);
return boost::regex_replace(s, e, "\\1" + format);
}
但由于性能原因,我不喜欢使用 boost::regex。boost::algorithm::replace 看起来很合适,但我不知道具体如何。