用C#中的正则表达式替换连接字符串中的密码

时间:2011-12-02 17:09:30

标签: c# regex

我正在尝试在C#中创建一个正则表达式,它将替换连接字符串的密码,以便在我在页面上显示时不显示它。连接字符串密码在字符串中的某处,如PWD = password;

到目前为止,我有:

Regex.Replace(connStr, "PWD=.*;", "PWD=********");

这可以找到模式的开头,但问题是外卡(。*)还包括;所以模式永远不会终止,字符串的其余部分也会被替换。我怎么能说everthing但是;在我的RegEx?

感谢。

5 个答案:

答案 0 :(得分:16)

你可以使用非贪婪的量词:

PWD=.*?;

或排除; s:

PWD=[^;]*;

答案 1 :(得分:14)

您不需要使用RegEx - .NET具有内置的SqlConnectionStringBuilder类,您可以使用它从连接字符串中获取值并更改它们。

示例代码:

string conString = "Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;";
var builder = new SqlConnectionStringBuilder(conString);

builder.Password = "********";

Console.WriteLine(builder.ToString());

答案 2 :(得分:0)

我们遇到了这个问题,一位同事想出了以下正则表达式:

"(?i)(?:^|.*;)pwd=(\".*\"|.*?)(?:;|$)+?"

"(?i)(?:^|.*;)password=(\".*\"|.*?)(?:;|$)+?"

如果有密码而不是密码。

密码与以下代码匹配:

            var regex = new Regex(mask);
            var password = string.Empty;
            var match = regex.Match(connectionString);
            if (match.Success && match.Groups.Count > 1)
            {
                password = match.Groups[1].Value;
            }

答案 3 :(得分:0)

建议的解决方案存在很多问题。这不是纯正的正则表达式,但处理套管,空格和可选的尾随分隔符(,或;)

this.router.navigate(['login']);

答案 4 :(得分:0)

这是我正在使用的正则表达式

{{$username}}

使用positiv来查找密码的开头, positiv展望未来,找到密码的结尾并 不贪心的匹配表达式。 在各种情况下,“检测令牌”(Password =;'“ $)可能有所不同。

Testcases: https://regex101.com/

c#实现

(?<=Password=).+?(?=(;|'|"|$))