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

use*_*166 -3 regex

我对正则表达式不太满意,我在这里只有一个简单的问题.

我有这样一个链接列表:

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)

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

pon*_*cha 5

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

[a-z]+://([^/ ]+)(?:/[^/ ]*/?)?
Run Code Online (Sandbox Code Playgroud)

以下是它的工作原理:

  1. [a-z]+ 部分用于协议名称(这意味着,"1个或多个字母" - 它将匹配http/https/file/ftp/gopher/foo /无论协议,但如果你只想匹配"http",你可以明确地写它)
  2. :// 字面意思是它说的;)
  3. [^/ ]+是一个或多个非斜杠和非空格字符.它可以是"一个",可以是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
Run Code Online (Sandbox Code Playgroud)

注意#1:我没有故意使用转义为正斜杠来使表达式更具可读性,因此请确保使用其他一些字符作为a delimiter,或者转义所有外观/- 使用\/.

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

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