首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++11正则表达式替换

C++11正则表达式替换
EN

Stack Overflow用户
提问于 2013-10-14 21:41:21
回答 1查看 1.7K关注 0票数 0

我有一个XML字符串希望注销。这个XML包含一些敏感数据,我想在发送到日志文件之前隐藏这些数据。目前正在使用std::regex这样做:

代码语言:javascript
复制
std::regex reg("<SensitiveData>(\\d*)</SensitiveData>");
return std::regex_replace(xml, reg, "<SensitiveData>......</SensitiveData>");

目前,这些数据正被完全6‘’的数据所取代。但是,我真正想做的是用正确的点数替换敏感数据。也就是说,我想得到捕获组的长度,并记下确切的点数。

这能办到吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-15 06:49:10

regex_replace of C++11正则表达式没有您所要求的功能-替换格式参数一定是字符串。一些正则表达式API允许替换为接收匹配的函数,并且可以执行所需的替换。

但是regexp不是用来解决问题的必由之路,在C++中查找两个固定的字符串并在两个字符串之间替换字符并不困难:

代码语言:javascript
复制
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);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19369772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档