正则表达式从C#中解析URL中的主机名?

时间:2010-12-01 06:38:39

标签: c# regex

嘿,我很好奇如何使用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://”。谢谢:))

4 个答案:

答案 0 :(得分:4)

我不会使用正则表达式。

  1. 将字符串中的'http://'转换为''(空字符串) - 这基本上会删除http://如果它在那里
  2. Split字符串/作为数组
  3. 主机名是索引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]+\/ - 唯一的问题是在主机名

之后需要/