嘿,我很好奇如何使用C#中的正则表达式解析URL中的主机名。
我有以下正则表达式:
Regex regexUrl = new Regex("://(?<host>([a-z\\d][-a-z\\d]*[a-z\\d]\\.)*[a-z][-a-z\\d]+[a-z])");
但是当URL不包含“http://”时会抛出错误,并且它也不会解析出“www”。网址的一部分。
那么我如何编写一个从URL解析出“hostname.com”的函数,即使它不包含“http://”。谢谢:))
答案 0 :(得分:4)
我不会使用正则表达式。
答案 1 :(得分:3)
为什么不做这样的事呢?
Uri uri;
if (!Uri.TryCreate(s, UriKind.Absolute, out uri)) {
if (!Uri.TryCreate("http://" + s, UriKind.Absolute, out uri)) {
throw new ArgumentException();
}
}
return uri.Host;
这是更多的行,但它可能比正则表达式更清晰,更容易阅读。
答案 2 :(得分:0)
如果您坚持使用正则表达式,则应执行以下操作:^([a-z]+://)?(?<host>[a-z\d][a-z\d-]*(\.[a-z\d][a-z\d-]*)*)[/$]
诀窍是让最后一个字符匹配/
或终结符($
)
答案 3 :(得分:-1)
[^\/\.\s]+\.[^\/\.\s]+\/
- 唯一的问题是在主机名
/