我有以下代码来解析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)
为什么主机被截断?
解析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)