Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于从C#中的URL解析主机名的正则表达式?_C#_Regex - Fatal编程技术网

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

用于从C#中的URL解析主机名的正则表达式?,c#,regex,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])"); Regex regexUrl=new Regex(“:/(?([a-z\\d][a-z\\d]*[a-z\\d]\\)*[a-z][a-z\\d]+[a-z]); 但是,当URL不包含“http://”时,它会抛

嘿,我很好奇如何用C#中的正则表达式解析URL中的主机名

我有以下正则表达式:

Regex regexUrl = new Regex("://(?<host>([a-z\\d][-a-z\\d]*[a-z\\d]\\.)*[a-z][-a-z\\d]+[a-z])");
Regex regexUrl=new Regex(“:/(?([a-z\\d][a-z\\d]*[a-z\\d]\\)*[a-z][a-z\\d]+[a-z]);
但是,当URL不包含“http://”时,它会抛出一个错误,并且它也不会解析出URL的“www.”部分


那么,我该如何编写一个函数,从URL解析出“hostname.com”,即使它不包含“http://”。谢谢:)

为什么不做这样的事呢

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;

它的行数更多,但可能比正则表达式更干净,更容易阅读。

为什么不做类似的事情呢

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;

它有更多的行,但可能比正则表达式更简洁,更易于阅读。

我不会使用正则表达式

  • 将字符串中的“http://”转换为“”(空字符串)——这基本上会删除http://(如果有)
  • 以数组形式显示/上的字符串
  • 主机名是索引0处的元素

  • 我不会使用正则表达式

  • 将字符串中的“http://”转换为“”(空字符串)——这基本上会删除http://(如果有)
  • 以数组形式显示/上的字符串
  • 主机名是索引0处的元素

  • [^\/\.\s]+\.[^\/\.\s]+\/
    -唯一的问题是它需要在主机名之后
    /
    [^\/\.\s]+\.[^\/\.\s]+\/
    -唯一的问题是,如果您坚持使用正则表达式,它需要在主机名之后
    /

    ,这应该可以做到:
    ^([a-z]+//)(?[a-z\d][a-z-]a-z]/.-/-]d.[*]


    诀窍是让最后一个字符匹配a
    /
    或终止符(
    $

    如果你坚持使用正则表达式,那么应该这样做:
    ^([a-z]+:/)?(?[a-z\d][a-z\d-]*(\.[a-z\d][a-z\d-]*))*)[/$]


    诀窍是让最后一个字符匹配
    /
    或终止符(
    $

    这在提供“testServer:666”时不起作用。URI的主机将是未知的。您应该按照以下方式更正示例:{if(!Uri.TryCreate(uriStr,UriKind.Absolute,out Uri)| Uri.HostNameType==UriHostNameType.Unknown){if(!Uri.TryCreate(“http:/”+uriStr,UriKind.Absolute,out Uri)| Uri.HostNameType==UriHostNameType.Unknown){抛出新的ArgumentException()}当提供“testServer:666”时,这不起作用。URI的主机将是未知的。您应该按照以下方式更正示例:{if(!Uri.TryCreate(uriStr,UriKind.Absolute,out Uri)| Uri.HostNameType==UriHostNameType.Unknown){if(!Uri.TryCreate(“http:/”+uriStr,UriKind.Absolute,out Uri)| Uri.HostNameType==UriHostNameType.Unknown){抛出新的ArgumentException()}