[英]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.