正则表达式从任何域提取域名

时间:2009-02-09 02:44:21

标签: c# regex

我正在尝试从C#中的字符串中提取域名。您不一定要使用RegEx,但我们应该能够从以下所有内容中提取yourdomain.com

yourdomain.com
www.yourdomain.com
http://www.yourdomain.com
http://www.yourdomain.com/
store.yourdomain.com
http://store.yourdomain.com
whatever.youdomain.com
*.yourdomain.com

此外,任何TLD都可以接受,因此请使用.net.org'co'uk等替换上述所有内容。

4 个答案:

答案 0 :(得分:15)

  1. 如果没有方案存在(字符串中没有冒号),请在“http://”前面加上一个有效的网址。

  2. 将字符串传递给Uri constructor

  3. 访问Uri的Host property

  4. 现在你有了主机名。你究竟认为给定主机名的“域名”究竟是一个值得商榷的问题。我猜你不是仅仅意味着第一个点之后的一切。

    不可能将'whatever.youdomain.com'等主机名与像'warwick.ac.uk'这样的SLD中的域名区别开来。事实上,考虑到一些注册商努力开辟自己的利基市场,甚至有一些关于什么是公共SLD的灰色区域。

    一种常见的方法是维护一个由无关实体使用的SLD和其他后缀的大列表。这就是Web浏览器为阻止不必要的公共cookie共享所做的事情。一旦找到了公共后缀,就可以在主机名中添加一个最接近的前缀,用点分割,以获得负责给定主机名的最高级实体,如果这是您想要的。后缀列表是难以维护的,但你可以捎带someone else's efforts

    或者,如果您的应用程序具有时间和网络连接,则可以开始嗅探有关主机名的信息。例如。它可以对主机名进行whois查询,并继续查看每个父项,直到得到结果,这将是负责给定主机名的最低级实体的域名。

    或者,如果所有这些工作太多,你可以尝试切断任何领先的'www。'礼物!

答案 1 :(得分:0)

我建议你自己尝试一下。使用调节器和正则表达式备忘单。

http://sourceforge.net/projects/regulator/

http://regexlib.com/CheatSheet.aspx

还可以在coding horror找到关于正则表达式的一些好消息。

答案 2 :(得分:0)

正则表达式并不真正符合您对“任何 TLD”的要求,因为TLD的格式和数量非常大且不断变化。如果您将范围限制为:

(?<domain>[^\.]+\.([A-Z]+$|co\.[A-Z]$))

你会抓住.anything和.co.anything,我想这涵盖了最现实的案例......

答案 3 :(得分:0)

看看这个other answer。它适用于PHP,但您可以轻松地从4-5行PHP中获取正则表达式,您可以从后面的讨论中受益(请参阅Alnitak's answer)。