我有一个XML字符串希望注销。这个XML包含一些敏感数据,我想在发送到日志文件之前隐藏这些数据。目前正在使用std::regex这样做:
std::regex reg("<SensitiveData>(\\d*)</SensitiveData>");
return std::regex_replace(xml, reg, "<SensitiveData>......</SensitiveData>");目前,这些数据正被完全6‘’的数据所取代。但是,我真正想做的是用正确的点数替换敏感数据。也就是说,我想得到捕获组的长度,并记下确切的点数。
这能办到吗?
发布于 2013-10-15 06:49:10
regex_replace of C++11正则表达式没有您所要求的功能-替换格式参数一定是字符串。一些正则表达式API允许替换为接收匹配的函数,并且可以执行所需的替换。
但是regexp不是用来解决问题的必由之路,在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);
}
}https://stackoverflow.com/questions/19369772
复制相似问题