-3

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

我有一个这样的链接列表:

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/

这是我需要的第一个正则表达式,我只需要另一个正则表达式来取出域,但我想我会弄清楚是否有人可以告诉我正则表达式只取出我写的内容。

4

3 回答 3

5

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

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

以下是它的工作原理:

  1. [a-z]+部分用于协议名称(这意味着“1 个或多个字母” - 它将匹配 http/https/file/ftp/gopher/foo/whatever 协议,但如果您只想匹配“http”,则可以显式编写)
  2. ://字面意思是它所说的;)
  3. [^/ ]+是一个或多个非斜线和非空格字符。它可以是“a”,可以是 fqdn,可以是 IP 地址。任何
  4. (?:/[^/ ]*/?)?- 这个比较复杂。?到底意味着括号中的整个事情可能存在也可能不存在(它是可选的)。?:紧接在括号内的意思是不要重用这个子模式(它没有分配一个数字,以后不能被那个数字重用)。[^/ ]*表示 0 个或多个非斜杠非空格字符,并且斜杠后面的问号再次表明斜杠是可选的。

总体而言,这确保了以下内容的匹配:

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 - 只有主机名

于 2012-07-04T20:18:29.647 回答
1

这可能是您正在寻找的:

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

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

于 2012-07-04T20:27:20.907 回答
0

为您的第一个任务使用正则表达式https?:\/\/[^\/]+\/[^\/]+/(.*)- 替换$1为 emtpy string ''

将正则表达式https?:\/\/([^\/]+)用于您的第二个任务 - 匹配$1是域名。

于 2012-07-04T20:05:52.937 回答