在cpp中使用正则表达式将password('abcs')子句屏蔽为password('****')

hydra123

我有一个功能,使字符串:

 select * from run_on_hive(server('hdp230m2.labs.teradata.com'),username('vijay'),password('vijay'),dbname('default'),query('analyze table default.test01 compute statistics'));

至:

 select * from run_on_hive(server('hdp230m2.labs.teradata.com'),username('vijay'),'****',dbname('default'),query('analyze table default.test01 compute statistics'));

该函数如下所示:

static SimpleRegexMask::Ptr newUDFMask(const String &udfName, const int paramPos)
{

   return SimpleRegexMask::newInstance(
         udfName,
         udfName + "([^[:alpha:]]*)\\((([^,]*,){" + toString(paramPos - 1) + "})([^,]*)(,[^\\)]*)\\)",
         udfName + "\\1\\(\\2'****'\\5\\)"
         );
}

这些是以上功能之一。我希望它能解释我要做什么

 static Ptr newInstance(
      const String &baseRegex,
      const String &replaceRegex,
      const String &matchFormatString
      )
   {
      return new SimpleRegexMask(baseRegex, replaceRegex, matchFormatString);
   }


SimpleRegexMask::SimpleRegexMask(
   const String &baseRegex,
   const String &replaceRegex,
   const String &matchFormatString
   )
{
   try {
      basePattern_ = boost::regex(
         baseRegex, boost::regex_constants::icase|boost::regex_constants::perl
         );
      replacePattern_ = boost::regex(
         replaceRegex, boost::regex_constants::icase|boost::regex_constants::perl
         );
      matchFormatString_ = matchFormatString;
   } catch (const boost::regex_error& ex) {
      // programming error i.e. the regex supplied is not valid
      NOT_REACHED;
   }
}

但是,我想将字符串修改为

 select * from run_on_hive(server('hdp230m2.labs.teradata.com'),username('vijay'),password('****'),dbname('default'),query('analyze table default.test01 compute statistics'));

我应该如何修改上述功能来做到这一点?我要去哪里错了。请告诉我。TIA。

维克多·史翠比维

您可以使用

return SimpleRegexMask::newInstance(
     udfName,
     "(" + udfName + "[^[:alpha:]]*)\\(((?:[^,]*,){" + toString(paramPos - 1) + "}[^,(]*\\(['\"])[^,'\"]*(['\"]\\),[^)]*)\\)",
     "\\1\\(\\2****\\3\\)"
 );

请参阅regex演示

我在这里优化了捕获组的用法(减少了其数量),并使用[^,(]*\\(['\"])[^,'\"]*(['\"]\\)模式password通过以下方式匹配该部分:捕获password('password("进入组2,然后匹配,"以外的任何0+字符',然后将')捕获")到后续捕获组中。

请注意,UDF名称被捕获到组1中,您无需在替换字符串中对其进行硬编码。因此,如果它RUN_ON_HIVE在字符串中,RUN_ON_HIVE即使您run_on_hive在模式中,它也将出现在结果中(因为您使用的是不区分大小写的修饰符)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

正则表达式将 SSN 的输入屏蔽为 ***-**-xxxx

如何在正则表达式Java中使用条件将字符串分隔为','

使用正则表达式屏蔽信用卡号

如何在Laravel中查询的WHERE子句中使用正则表达式?

在bash中的if子句中使用正则表达式

在rails中使用小于或大于where子句中的正则表达式

正则表达式电话屏蔽

正则表达式将IIF子句分成组

正则表达式:将URL修剪为根

正则表达式将文本解析为参数

如何使用Java将文件基于正则表达式分解为令牌

如何使用正则表达式或工具包将句子解析为标记

使用正则表达式 sep 时,Pandas read_csv 将 NaN 读取为“”

python:使用正则表达式将docstring捕获为完全匹配

使用正则表达式将韩文文本解析为列表

使用正则表达式将输入格式设置为货币格式

如何使用正则表达式将文本设置为小写?

如何使用正则表达式将多行文本块解析为字典?

使用正则表达式将特定数字设置为 NA?

使用正则表达式将列的部分重塑为长格式

使用正则表达式将字符串分割为每个特殊字符

Javascript不会使用正则表达式将头发空间解释为空间

如何使用正则表达式将行的开头修剪为特定符号?

如何在Java中使用正则表达式屏蔽字符串中的多个值

使用参数为 url 编写正则表达式

如何将正则表达式模式存储为正则表达式对象或字符串?

正则表达式:如何将域名的正则表达式扩展为包含abcd类型的域?

如何在python中使用正则表达式将所有内容匹配为双换行符“ \ n \ n”?

如何在MySQL where和where子句中的语句中使用正则表达式