簡體   English   中英

單個表達式中的多個正則表達式匹配

[英]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 ): 一個"字符后跟passwordRootPasswordPassPhrase然后是一個":" ZE83AED3DDF4667DEC0DAAAACB2BB3BE0BZ
  • [^"]* - 除了"盡可能多的任何零個或多個字符
  • (") - 第 2 組 ( $2 ):一個"字符。

暫無
暫無

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

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