我正在尝试在C#中创建一个正则表达式,它将替换连接字符串的密码,以便在我在页面上显示时不显示它。连接字符串密码在字符串中的某处,如PWD = password;
到目前为止,我有:
Regex.Replace(connStr, "PWD=.*;", "PWD=********");
这可以找到模式的开头,但问题是外卡(。*)还包括;所以模式永远不会终止,字符串的其余部分也会被替换。我怎么能说everthing但是;在我的RegEx?
感谢。
答案 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=).+?(?=(;|'|"|$))