簡體   English   中英

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);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM