0

我有一个想要注销的 XML 字符串。此 XML 包含一些我想在发送到日志文件之前屏蔽掉的敏感数据。目前使用 std::regex 来做到这一点:

std::regex reg("<SensitiveData>(\\d*)</SensitiveData>");
return std::regex_replace(xml, reg, "<SensitiveData>......</SensitiveData>");

目前,数据正被 6 '.' 替换。字符,但是我真正想做的是用正确的点数替换敏感数据。即我想获得捕获组的长度并将确切的点数放下。

这可以做到吗?

4

1 回答 1

0

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);
    }
}
于 2013-10-15T06:49:10.763 回答