我对正则表达式不是很了解,我在这里只有一个简单的问题。
我有这样一个链接列表:
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/
这是我需要的第一个正则表达式,我需要另一个正则表达式来取出域名,但我想如果有人能告诉我正则表达式只取出我写的内容,我会想出来。
答案 0 :(得分:5)
这是您(最有可能)需要的:
[a-z]+://([^/ ]+)(?:/[^/ ]*/?)?
以下是它的工作原理:
[a-z]+
部分用于协议名称(这意味着,“1个或多个字母” - 它将匹配http / https / file / ftp / gopher / foo /无论协议,但如果您只想匹配“ http“你可以明确地写出来”://
实际上就是它所说的;)[^/ ]+
是一个或多个非斜杠和非空格字符。它可以是“一个”,可以是fqdn,可以是ip地址。任何(?:/[^/ ]*/?)?
- 这个更复杂。 ?
到底意味着括号中的这整个事物可能存在也可能不存在(它是可选的)。紧接在括号内的?:
表示不重复使用此子模式(它未分配号码,以后不能再使用该号码)。 [^/ ]*
表示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 - 仅主机名
答案 1 :(得分:1)
这可能就是你要找的东西:
([a-zA-Z]+://([\w.]*)/(?:.*?/)?)
您拥有组1中的所有匹配项,只有组中的域名.2。不需要2个正则表达式。 :)
答案 2 :(得分:0)
使用正则表达式https?:\/\/[^\/]+\/[^\/]+/(.*)
执行第一项任务 - 将$1
替换为空字符串''
。
使用正则表达式https?:\/\/([^\/]+)
执行第二项任务 - 匹配$1
是域名。