我正在解析一个URL文件来获取主机和URI部分但是当URL没有用斜杠结束时有一个错误。
C#代码:
var URL = Regex.Match(link, @"(?:.*?//)?(.*?)(/.*)", RegexOptions.IgnoreCase);
输入:
//cdn.sstatic.net/stackoverflow/img/favicon.ico
/opensearch.xml
http://stackoverflow.com/
http://careers.stackoverflow.com
输出:
//cdn.sstatic.net/stackoverflow/img/favicon.ico has 2 groups:
cdn.sstatic.net
/stackoverflow/img/favicon.ico
/opensearch.xml has 2 groups:
/opensearch.xml
http://stackoverflow.com/ has 2 groups:
stackoverflow.com
/
http://careers.stackoverflow.com has 2 groups:
http:
//careers.stackoverflow.com
输出中的每个网址都有效:http://careers.stackoverflow.com。我如何检查变量部分,如“如果有斜线,停止第一个抓住每一个东西”。
答案 0 :(得分:1)
将|$
添加到您的上一个组,以匹配该文本或匹配表达式的结尾。
这适用于您的输入:
var links = new[]
{
"//cdn.sstatic.net/stackoverflow/img/favicon.ico",
"/opensearch.xml",
"http://stackoverflow.com/",
"http://careers.stackoverflow.com"
};
foreach (string link in links)
{
var u = Regex.Match(link, @"(?:.*?//)?(.*?)(/.*|$)", RegexOptions.IgnoreCase);
Console.WriteLine(link);
Console.WriteLine(" " + u.Groups[1]);
Console.WriteLine(" " + u.Groups[2]);
Console.WriteLine();
}
输出:
//cdn.sstatic.net/stackoverflow/img/favicon.ico
cdn.sstatic.net
/stackoverflow/img/favicon.ico
/opensearch.xml
/opensearch.xml
http://stackoverflow.com/
stackoverflow.com
/
http://careers.stackoverflow.com
careers.stackoverflow.com
答案 1 :(得分:1)
只是另一种选择
/(?:.+\/\/|\/\/)?([^\/]*)(\/.+)?/
答案 2 :(得分:-1)
usr是正确的,您应该使用Uri
类,但如果您坚持使用Regex
,请尝试使用零宽度正向前瞻断言,如下所示:
var URL = Regex.Match(link, @"(?:.*?//)?(.*?(?=/|$))(/.*)", RegexOptions.IgnoreCase);
更多详情:
http://msdn.microsoft.com/en-us/library/bs2twtah.aspx#zerowidth_positive_lookahead_assertion