正则表达式来解析FTP链接字符串

Jef*_*ffR 0 c# regex

我有以下代码来解析FTP链接的各个部分:

Regex exp = new Regex(@"(?i)ftp:\/\/(?<user>\S+?):(?<passwd>\S+?)@(?<host>\S+?.\S+?.\S+?.\S+?)");
Match m = exp.Match(@"Link: ftp://username:password@host.sub.domain.tld<ftp://username:password@host.sub.domain.tld/>");

Console.WriteLine("Host = " + m.Groups["host"].Value);
Console.WriteLine("User = " + m.Groups["user"].Value);
Console.WriteLine("Pass = " + m.Groups["passwd"].Value);
Run Code Online (Sandbox Code Playgroud)

其中产生以下输出:

Host = host.su
User = username
Pass = password
Run Code Online (Sandbox Code Playgroud)

为什么主机被截断?

Ric*_*ard 5

解析Uri已经在.NET中完成了.URI的语法有太多的边缘情况和变体才能使用正则表达式.

所以使用内置支持:

var u = new Uri("ftp://username:password@host.sub.domain.tld");

var host = u.Host;
var ui = u.UserInfo.Split(':')
var user = ui[0];
var pwd = ui[1];
Run Code Online (Sandbox Code Playgroud)