将 SQL 连接字符串的各个部分与正则表达式匹配

本文关键字:正则表达式 个部 SQL 连接 字符串 | 更新日期: 2023-09-27 18:32:09

>我编写了一个正则表达式来匹配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*)*;?");

但由于连接字符串中存在分号,此操作将失败。处理这个问题的最佳正则表达式是什么?

谢谢你的时间。

将 SQL 连接字符串的各个部分与正则表达式匹配

是否可以使用

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

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

编辑

Allon Guralnek提供了更好的方法来做到这一点 - 谢谢!

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

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