regex_replace
的 C++11 正则表达式不具备您要求的功能 - 替换格式参数必须是 string。一些正则表达式 API 允许将替换作为接收匹配的函数,并且可以完全执行您需要的替换。
但是正则表达式并不是解决问题的唯一方法,在 C++ 中,查找两个固定字符串并替换其间的字符并不难:
const char* const PREFIX = "<SensitiveData>";
const char* const SUFFIX = "</SensitiveData>";
void replace_sensitive(std::string& xml) {
size_t start = 0;
while (true) {
size_t pref, suff;
if ((pref = xml.find(PREFIX, start)) == std::string::npos)
break;
if ((suff = xml.find(SUFFIX, pref + strlen(PREFIX))) == std::string::npos)
break;
// replace stuff between prefix and suffix with '.'
for (size_t i = pref + strlen(PREFIX); i < suff; i++)
xml[i] = '.';
start = suff + strlen(SUFFIX);
}
}