[英]Multiple regex matches in single expression
我有以下敏感数据:
"Password":"123","RootPassword":"123qwe","PassPhrase":"phrase"
我想获得以下安全数据:
"Password":"***","RootPassword":"***","PassPhrase":"***"
这是我的代码:
internal class Program
{
private static void Main(string[] args)
{
var data = "\"Password\":\"123\",\"RootPassword\":\"123qwe\",\"PassPhrase\":\"phrase\"";
var safe1 = PasswordReplacer.Replace1(data);
var safe2 = PasswordReplacer.Replace2(data);
}
}
public static class PasswordReplacer
{
private const string RegExpReplacement = "$1***$2";
private const string Template = "(\"{0}\":\").*?(\")";
private static readonly string[] PasswordLiterals =
{
"password",
"RootPassword",
"PassPhrase"
};
public static string Replace1(string sensitiveInfo)
{
foreach (var literal in PasswordLiterals)
{
var pattern = string.Format(Template, literal);
var regex = new Regex(pattern, RegexOptions.IgnoreCase);
sensitiveInfo = regex.Replace(sensitiveInfo, RegExpReplacement);
}
return sensitiveInfo;
}
public static string Replace2(string sensitiveInfo)
{
var multiplePattern = "(\"password\":\")|(\"RootPassword\":\")|(\"PassPhrase\":\").*?(\")"; //?
var regex = new Regex(string.Format(Template, multiplePattern), RegexOptions.IgnoreCase);
return regex.Replace(sensitiveInfo, RegExpReplacement);
}
}
Replace1
方法按预期工作。 但它会一一完成。 我的问题是是否可以做同样的事情但使用单个正则表达式匹配? 如果是这样,我需要Replace2
的帮助。
Replace2
看起来像
public static string Replace2(string sensitiveInfo)
{
var multiplePattern = $"(\"(?:{string.Join("|", PasswordLiterals)})\":\")[^\"]*(\")";
return Regex.Replace(sensitiveInfo, multiplePattern, RegExpReplacement, RegexOptions.IgnoreCase);
}
请参阅C# 演示。
multiplePattern
将包含类似("(?:password|RootPassword|PassPhrase)":")[^"]*(")
的模式,请参阅正则表达式演示。快速详细信息:
("(?:password|RootPassword|PassPhrase)":")
- 第 1 组 ( $1
): 一个"
字符后跟password
、 RootPassword
或PassPhrase
然后是一个":"
ZE83AED3DDF4667DEC0DAAAACB2BB3BE0BZ[^"]*
- 除了"
尽可能多的任何零个或多个字符(")
- 第 2 组 ( $2
):一个"
字符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.