如何使用 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")
。使用其属性,如Host
、Port
和Segments.Last()
,您必须通过拆分:
来解析UserInfo
属性。
【参考方案1】:
你不想在这里使用正则表达式(请参阅@madreflection 的评论),但如果你这样做了,它应该看起来像这样:
@"^(?<protocol>\w+)://(?<user>\w+):(?<password>\w+)@(?<host>\w+):(?<port>\w+)/(?<database>\w+)$"
您使用(
和)
创建组
然后你用?<name>
命名它
实际上这里有解释这一点的文档
https://docs.microsoft.com/en-us/dotnet/api/system.text.regularexpressions.regex?view=netframework-4.8
我更喜欢你的语法,但遗憾的是这不是正则表达式的工作方式。
【讨论】:
替换上例中的正则表达式仍然会导致输出为空 那你的输入数据不对@Benj?不能说不调试。使用 madreflection 建议的对象信息以上是关于如何使用 RegEx 转换数据库连接字符串格式? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
Twig / PHP - 使用Replace或Regex格式化字符串