我对正则表达式不太满意,我在这里只有一个简单的问题.
我有这样一个链接列表:
http://domain.com/andrei/sometext
http://domain2.com/someothertext/sometextyouknow/whoknows
http://domain341.com/text/thisisit/haha
Run Code Online (Sandbox Code Playgroud)
我只想要两个正则表达式来解决这个问题:
http://domain.com/andrei/
http://domain2.com/someothertext/
http://domain341.com/text/
Run Code Online (Sandbox Code Playgroud)
这是我需要的第一个正则表达式,我需要另一个正则表达式来取出域名,但我想如果有人能告诉我正则表达式只取出我写的内容,我会想出来的.
这是你(最有可能)需要的:
[a-z]+://([^/ ]+)(?:/[^/ ]*/?)?
Run Code Online (Sandbox Code Playgroud)
以下是它的工作原理:
[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
Run Code Online (Sandbox Code Playgroud)
注意#1:我没有故意使用转义为正斜杠来使表达式更具可读性,因此请确保使用其他一些字符作为a delimiter,或者转义所有外观/- 使用\/.
注意#2:i如果希望表达式不区分大小写(a-z不匹配大写),则添加g修饰符;如果要在一个大块文本中进行多个匹配,则添加修饰符.
在匹配中,子模式0将是整个匹配的东西,子模式1将只有主机名