C++11 正则表达式替换
C++11 regex replace
我有一个 XML 字符串,我想注销。 此 XML 包含一些敏感数据,我想在发送到日志文件之前屏蔽这些数据。 当前使用 std::regex 来执行此操作:
std::regex reg("<SensitiveData>(\d*)</SensitiveData>");
return std::regex_replace(xml, reg, "<SensitiveData>......</SensitiveData>");
目前,数据正好被 6 个"."字符替换,但我真正想做的是用正确数量的点替换敏感数据。 即我想获取捕获组的长度并放下确切的点数。
这能做到吗?
C++11 个正则表达式中的regex_replace
没有您要求的功能 — 替换格式参数必须是字符串。某些正则表达式 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);
}
}
相关文章:
- C++正则表达式替换整个单词
- 用回调函数替换C++正则表达式
- 将一个特定字符替换为正则表达式匹配中的另一个字符
- 对 std::string 执行正则表达式搜索和替换
- Eclipse IDE,正则表达式搜索和替换
- 使用提升C++通过正则表达式替换字符串
- 正则表达式用模式替换模式
- C++11正则表达式:在替换字符串中捕获组后的数字
- C++正则表达式库,替换为函数指针
- 在Qt Creator中使用正则表达式在多个文件中查找和替换
- Visual Studio正则表达式替换
- C++正则表达式替换第一个匹配项
- 使用Boost替换正则表达式
- 使用正则表达式替换匹配项
- 有没有办法在一次迭代中进行任意数量的正则表达式替换
- 使用正则表达式替换 1 次迭代中的所有匹配项
- 如何使用增强正则表达式替换方法
- Boost正则表达式不替换正则表达式网站上正确替换的表达式
- 是否有任何C/ c++编辑器支持替换正则表达式?
- 在替换正则表达式中向匹配的数字添加一