我正在解析一个 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
输出中的每个 URL 都是有效的,除了:http://careers.stackoverflow.com .我如何检查可变部分,例如“如果有斜杠,请停止到第一个,否则捕获所有内容”。
最佳答案
将 |$
添加到最后一组,以匹配该文本或匹配表达式的结尾。
这适用于您的输入:
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
关于带有 URL 的 C# 正则表达式错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19620842/