清理cpp中的密码字符串

时间:2018-02-21 09:32:29

标签: c++ regex boost

我有一个字符串,

userStmt:

SELECT * FROM RUN_ON_HIVE(SERVER('10.23.40.23'),USERNAME('user'),PASSWORD('pass'),DBNAME('default'),QUERY('ANALYZE TABLE default.test01 COMPUTE STATISTICS'));

我正在尝试将密码子句转换为“****”。

String sanitizeduserstmt=userStmt;
  boost::regex pw_re("PASSWORD\\('[^']*'\\)");
  boost::regex_replace(sanitizeduserstmt, pw_re, "PASSWORD('****')");

但这不起作用。谁能告诉我哪里出错了? TIA

1 个答案:

答案 0 :(得分:1)

boost::regex_replace方法不会修改输入字符串,您需要将值赋值回变量。

在您的情况下,修复程序将类似于

#include <boost/regex.hpp>
#include <iostream>
using namespace std;

int main() {
    string sanitizeduserstmt="SELECT * FROM RUN_ON_HIVE(SERVER('10.23.40.23'),USERNAME('user'),PASSWORD('pass'),DBNAME('default'),QUERY('ANALYZE TABLE default.test01 COMPUTE STATISTICS'));";
    boost::regex pw_re("PASSWORD\\('[^']*'\\)");
    sanitizeduserstmt=boost::regex_replace(sanitizeduserstmt, pw_re, "PASSWORD('****')");
    std::cout << "Result: " << sanitizeduserstmt << "\n";
    // => Result: SELECT * FROM RUN_ON_HIVE(SERVER('10.23.40.23'),USERNAME('user'),PASSWORD('****'),DBNAME('default'),QUERY('ANALYZE TABLE default.test01 COMPUTE STATISTICS'));
}

请参阅Coliru demo