正则表达式从FQDN提取二级域名?

roy*_*yco 3 vb.net asp.net-mvc

我无法弄清楚这一点.我需要从FQDN中提取二级域.例如,所有这些都需要返回"example.com":

  1. example.com
  2. foo.example.com
  3. bar.foo.example.com
  4. example.com:8080
  5. foo.example.com:8080
  6. bar.foo.example.com:8080

这是我到目前为止所拥有的:

    Dim host = Request.Headers("Host")
    Dim pattern As String = "(?<hostname>(\w+)).(?<domainname>(\w+.\w+))"
    Dim theMatch = Regex.Match(host, pattern)
    ViewData("Message") = "Domain is: " + theMatch.Groups("domainname").ToString
Run Code Online (Sandbox Code Playgroud)

它失败的example.com:8080bar.foo.example.com:8080.有任何想法吗?

Ada*_*rad 5

我成功使用此Regex来匹配测试用例列表中的"example.com".

"(?<hostname>(\w+\.)*)(?<domainname>(\w+\.\w+))"
Run Code Online (Sandbox Code Playgroud)

点字符(".")需要转义为"\."."." 正则表达式模式中的字符匹配任何字符.

另外,你提供的正则表达式模式要求在域名匹配之前有一个或多个单词字符后跟一个点(这部分为"(?(\ w +))."模式.另外,我假设是.字符应该被逃脱).这无法匹配输入"example.com",因为在域名匹配之前没有单词字符和点.

我更改了模式,以便主机名匹配将包含零个或多个匹配的"1个或多个单词字符后跟一个点".这将匹配"foo.example.com"中的"foo"和"foo.bar.example.com"中的"foo.bar".