我正在尝试从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
等.
如果没有方案存在(字符串中没有冒号),请在"http://"前加上一个有效的URL.
将字符串传递给Uri构造函数.
访问Uri的主机属性.
现在你有了主机名.你究竟认为给定主机名的"域名"究竟是一个值得商榷的问题.我猜你不是简单地说第一个点之后的所有东西.
不可能将'whatever.youdomain.com'等主机名与像'warwick.ac.uk'这样的SLD中的域名区分开来.事实上,考虑到一些注册商努力开拓自己的利基市场,甚至还有一些关于什么是公共SLD的灰色区域.
一种常见的方法是维护一个由不相关实体使用的SLD和其他后缀的大列表.这就是Web浏览器为阻止不必要的公共cookie共享所做的事情.一旦找到了公共后缀,就可以在主机名中添加一个最接近的前缀,用点分割,以获得负责给定主机名的最高级实体,如果这是您想要的.后缀列表是难以维护的,但你可以捎带别人的努力.
或者,如果您的应用程序具有执行此操作的时间和网络连接,则可以开始嗅探有关主机名的信息.例如.它可以对主机名执行whois查询,并继续查看每个父项,直到获得结果,这将是负责给定主机名的最低级实体的域名.
或者,如果所有这些工作太多,你可以尝试切断任何领先的'www'.当下!