我找不到这个正则表达式的正则表达式

时间:2012-07-04 20:00:01

标签: regex

我对正则表达式不是很了解,我在这里只有一个简单的问题。

我有这样一个链接列表:

http://domain.com/andrei/sometext
http://domain2.com/someothertext/sometextyouknow/whoknows
http://domain341.com/text/thisisit/haha

我只想要两个正则表达式来解决这个问题:

http://domain.com/andrei/
http://domain2.com/someothertext/
http://domain341.com/text/

这是我需要的第一个正则表达式,我需要另一个正则表达式来取出域名,但我想如果有人能告诉我正则表达式只取出我写的内容,我会想出来。

3 个答案:

答案 0 :(得分:5)

这是您(最有可能)需要的:

[a-z]+://([^/ ]+)(?:/[^/ ]*/?)?

以下是它的工作原理:

  1. [a-z]+部分用于协议名称(这意味着,“1个或多个字母” - 它将匹配http / https / file / ftp / gopher / foo /无论协议,但如果您只想匹配“ http“你可以明确地写出来”
  2. ://实际上就是它所说的;)
  3. [^/ ]+是一个或多个非斜杠和非空格字符。它可以是“一个”,可以是fqdn,可以是ip地址。任何
  4. (?:/[^/ ]*/?)? - 这个更复杂。 ?到底意味着括号中的这整个事物可能存在也可能不存在(它是可选的)。紧接在括号内的?:表示不重复使用此子模式(它未分配号码,以后不能再使用该号码)。 [^/ ]*表示0个或更多非斜杠非空格字符,并且尾部斜杠后面的问号再次声明斜杠是可选的。
  5. 总的来说,这可以确保匹配这样的事情:

    http://foo/bar/baz/something -> http://foo/bar/
    http://hello.world.example.com/ -> http://hello.world.example.com/
    http://foo.net -> http://foo.net
    ftp://ftp.mozilla.org/pub -> ftp://ftp.mozilla.org/pub
    

    注意#1:我没有使用转义为正斜杠故意以使表达式更具可读性,因此请确保使用其他字符作为delimiter,或者转义所有/的出现 - 改为使用\/

    注意#2:如果您希望表达式不区分大小写,请添加i修饰符(a-z不匹配大写),如果要进行多个匹配,请添加g修饰符在一大块文字中。

    在匹配中,子模式0将是整个匹配的东西,子模式1 - 仅主机名

答案 1 :(得分:1)

这可能就是你要找的东西:

([a-zA-Z]+://([\w.]*)/(?:.*?/)?)

您拥有组1中的所有匹配项,只有组中的域名.2。不需要2个正则表达式。 :)

答案 2 :(得分:0)

使用正则表达式https?:\/\/[^\/]+\/[^\/]+/(.*)执行第一项任务 - 将$1替换为空字符串''

使用正则表达式https?:\/\/([^\/]+)执行第二项任务 - 匹配$1是域名。