匹配SQL连接字符串与Regex的部分

时间:2012-04-24 14:18:29

标签: c# regex

我编写了一个正则表达式来匹配SQL连接字符串的部分。在第一个规范中,初始目录等被强制不包含特殊字符。所以我有

string strConn = "Data Source=VAIOE;Initial Catalog=SomeTextOnlyCatname;Integrated 
    Security=True;Persist Security Info=True;MultipleActiveResultSets=True;Connect Timeout=0;";
Regex databaseNameRegex =
    new Regex(@"(?i)\b(Initial\sCatalog|Database)\b\s?=\s?(\w+\s*)*;?");

现在,我需要匹配可能具有符号,标点符号等名称的部分。例如

string strConn = "Data Source=VAIOE;Initial Catalog=N3wC@t@l0gName*6Symbols;Integrated 
    Security=True;Persist Security Info=True;MultipleActiveResultSets=True;Connect Timeout=0;";

我要返回Initial Catalog=N3wC@t@l0gName*6Symbols

我试过了

Regex databaseNameRegex =
    new Regex(@"(?i)\b(Initial\sCatalog|Database)\b\s?=\s?(\w+\p{P}*\p{M}*\p{Z}*\s*)*;?");

但是由于连接字符串中存在分号,这会失败。什么是最好的正则表达式来处理这个?

感谢您的时间。

1 个答案:

答案 0 :(得分:10)

您可以使用SqlConnection为您解析连接字符串并避免使用RegEx吗?如果您只需要数据库名称,则以下内容应该有效:

var conn = new SqlConnection(strConn);
Console.WriteLine(conn.Database);

修改

更好的方法是由Allon Guralnek提供 - 谢谢!

使用SqlConnectionStringBuilder - 它将提取您需要的任何信息。

var connBuilder = new SqlConnectionStringBuilder(strConn);
Console.WriteLine(connBuilder.InitialCatalog);