如何使用 RegEx 转换数据库连接字符串格式? [复制]

Posted

技术标签:

【中文标题】如何使用 RegEx 转换数据库连接字符串格式? [复制]【英文标题】:How to convert Database Connection String Formats using RegEx? [duplicate] 【发布时间】:2020-01-03 23:03:40 【问题描述】:

我尝试将数据库连接字符串转换为格式

postgres://<user>:<password>@<host>:<port>/<database>

到 C# 连接字符串

Username=<user>;Password=<dummy>;Host=<host>;Port=<port>;Database=<database>

以下代码演示了我尝试剖析连接字符串。

public static void Main(string[] args)

    const string SERVER_DB = "postgres://dummy:dummy123@127.0.0.1:4321/my_db";

    Regex templConString = new Regex(@"^<protocol>://<user>:<password>@<host>:<port>/<database>$");
    Match match = templConString.Match(Environment.GetEnvironmentVariable("SERVER_DB") ?? SERVER_DB);

    Console.WriteLine(match.Groups["protocol"].Value);
    Console.WriteLine(match.Groups["user"].Value);
    Console.WriteLine(match.Groups["password"].Value);
    Console.WriteLine(match.Groups["port"].Value);
    Console.WriteLine(match.Groups["database"].Value);

    Debugger.Break();


然而,结果输出是空的。我在网上找不到很多关于这个主题的有用信息。

编辑

Regex templConString = new Regex(@"^(?<protocol>\w+)://(?<user>\w+):(?<pass>\w+)@(?<host>[\.\w]+):(?<port>\w+)/(?<database>\w+)/*$");

给我我想要的东西

【问题讨论】:

忘掉正则表达式吧。使用new Uri("postgres://dummy:dummy123@127.0.0.1:4321/my_db")。使用其属性,如HostPortSegments.Last(),您必须通过拆分: 来解析UserInfo 属性。 【参考方案1】:

你不想在这里使用正则表达式(请参阅@madreflection 的评论),但如果你这样做了,它应该看起来像这样:

@"^(?<protocol>\w+)://(?<user>\w+):(?<password>\w+)@(?<host>\w+):(?<port>\w+)/(?<database>\w+)$"

您使用() 创建组

然后你用?&lt;name&gt;命名它

实际上这里有解释这一点的文档

https://docs.microsoft.com/en-us/dotnet/api/system.text.regularexpressions.regex?view=netframework-4.8

我更喜欢你的语法,但遗憾的是这不是正则表达式的工作方式。

【讨论】:

替换上例中的正则表达式仍然会导致输出为空 那你的输入数据不对@Benj?不能说不调试。使用 madreflection 建议的对象信息

以上是关于如何使用 RegEx 转换数据库连接字符串格式? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Twig / PHP - 使用Replace或Regex格式化字符串

fmt 库:如何使用 RegEx 添加编译时字符串检查?

JavaScript:如何使用 REGEX 减少 IF

如何在 spark sql 连接条件中将字符串数据类型转换为日期:to_date 不起作用并且转换抛出错误

使用 Java 和 RegEx 转换字符串中的大小写

js中如何将日期转化字符串