正则表达式:修剪到Root的URL

时间:2014-03-28 19:33:20

标签: regex

在我见过的所有主题中,我无法找到一个清晰的正则表达式模式,可以准确地修剪任何给定的URL到它的域根。许多解决方案都是通过使用某些PHP方法来避免正则表达式,但我使用的是Python,并希望使用简单的正则表达式。

这就是我所拥有的:

http://([^/]+).*

但是,这并不考虑具有以下内容的例外情况:

'http' or 'http://www.'

有没有人有正则表达式处理所有这些疯狂的例外?非常感谢!

编辑:以下是一些示例输入:

http://toronto.kijiji.ca/f-cars-vehicles-cars-trucks-W0QQCatIdZ174
http://wwwa.autotrader.ca/cars/on/toronto/
http://toronto.en.craigslist.ca/cta/
http://www.auto123.com/en/used-cars/classified/ontario/toronto?city=toronto
https://www.123-reg.co.uk/email-hosting/

示例输出:

kijiji.ca
autotrader.ca
craigslist.ca
auto123.com
123-reg.co.uk

2 个答案:

答案 0 :(得分:1)

我有这个(我不确定从哪里得到它):

[A-Za-z0-9-]+(\.[A-Za-z0-9-]+)*(\.[A-Za-z]{2,})

它的问题是最初的www。特别是,因为可能存在其他子域,例如您的示例中的子域。

也许你可以做一个字符串替换来删除额外的www。如果结果字符串有它。

您可以看到它正常工作here

另外,我认为您应该考虑以下事项:

http
https
www.domain.co.uk
photos.domain.co.uk

答案 1 :(得分:1)

使用“简单的正则表达式”无法做到这一点。如果所有扩展都是单部分的,那么(见下文),但没有办法通过模式区分二级域。例如,abc.co.uk具有与abc.uk.co相同的模式,但在第一种情况下,您希望返回abc.co.uk,而在第二种情况下,您需要uk.co。您的功能需要了解有效TLD和二级域名。

https?:\/\/(?:.*\.)*(.+\..+?)\/

enter image description here