正则表达式需要删除域名

时间:2011-01-25 09:20:03

标签: regex

我需要一个正则表达式来删除网址的域名部分。例如,如果我有以下网址:

http://www.website-2000.com

我希望正则表达式匹配的位是'website-2000'

如果您还可以解释正则表达式的每个部分如何帮助我理解它会很棒。

由于

5 个答案:

答案 0 :(得分:8)

这个应该有效。它可能有一些缺点,但我现在无法想到。如果有人想改进它,请随意这样做。

/http:\/\/(?:www\.)?([a-z0-9\-]+)(?:\.[a-z\.]+[\/]?).*/i

http:\/\/            matches the "http://" part
(?:www\.)?           is a non-capturing group that matches zero or one "www."
([a-z0-9\-]+)        is a capturing group that matches character ranges a-z, 0-9
                     in addition to the hyphen. This is what you wanted to extract.
(?:\.[a-z\.]+[\/]?)  is a non-capturing group that matches the TLD part (i.e. ".com",
                     ".co.uk", etc) in addition to zero or one "/"
.*                   matches the rest of the url

http://rubular.com/r/ROz13NSWBQ

答案 1 :(得分:4)

让我向您介绍这个奇妙的工具txt2re:regular expression generator

在这里,您可以尝试使用正则表达式并使用多种语言生成代码。

答案 2 :(得分:0)

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

无需使用regexp,请使用urlparse模块

>>> from urlparse import urlparse
>>> '.'.join(urlparse("http://www.website-2000.com").netloc.split('.')[-2:])
'website-2000.com'

答案 3 :(得分:0)

这个允许您不必担心前面的任何http / https / ftp等...也会捕获所有子域名。

(?:www\.)?([a-z0-9\-.]+)(?:\.[a-z\.]+[\/]?).*/i

我发现它失败的唯一时间是: - 如果一个 。在域之前没有任何文本的域/子域之前。包含在正则表达式捕获中。 - 发送电子邮件。在他们身上是行不通的。 (通过在运行正则表达式之前首先检查传递的域是否为@符号来解决此问题) - 域/子域中间的空格

答案 4 :(得分:0)

r/^[^:]+:\/\/[^/?#]+//

这对我有用。

它将匹配任何方案或协议,然后在://匹配任何不是/的字符?要么 #。这三个字符首次出现在URL中时,表示域的结尾,以便我结束匹配。