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

Pau*_*aul 10 c# regex

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

到目前为止,我有:

Regex.Replace(connStr, "PWD=.*;", "PWD=********");
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

Ry-*_*Ry- 16

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

PWD=.*?;
Run Code Online (Sandbox Code Playgroud)

或排除;s:

PWD=[^;]*;
Run Code Online (Sandbox Code Playgroud)

  • 如果它是最后一项而不是分号后跟你应该使用:PWD =([^;]*)(?:$ |;) (8认同)
  • @Paul:这不是不区分大小写的.传递`RegexOptions.IgnoreCase`是不区分大小写的:) (5认同)

Chr*_*cht 15

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

示例代码:

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

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

Console.WriteLine(builder.ToString());
Run Code Online (Sandbox Code Playgroud)