正则表达式以匹配相对和绝对URL

Fly*_*wat 8 regex

任何人都想尝试提出一个匹配两者的正则表达式:

我认为用一个正则表达式做它可能是不可能的,但你永远不会知道.

编辑:澄清一下,我正在尝试做的是从文档中挑选出所有URI(不是HTML文档).

ric*_*ent 8

(
  ((http|https|ftp)://([\w-\d]+\.)+[\w-\d]+){0,1}  // Capture domain names or IP addresses
  (/[\w~,;\-\./?%&+#=]*)                // Capture paths, including relative
)
Run Code Online (Sandbox Code Playgroud)

这个答案的基本原理:

  1. 整个事情被分组,以便您可以选择整个URL
  2. 协议部分是可选的,但如果提供,还应提供主机名或IP地址(两者都允许的字符数少于URI的其余部分).
  3. 开头的"/"也是可选的.路径可以采用"images/1.gif"形式,它们相对于当前路径而不是相对于主机名.

注意事项:

  1. mailto和文件URI不受支持.
  2. 在一段时间内(例如在没有引用的句子末尾)落后的网址将包括尾随期间.
  3. 由于上面的#3,它将捕获各种各样的东西.如果您可以验证所有路径都没有相对的,你可以添加一个"/"外的括号,因此需要它.
  4. 如果所有URI都在HTML属性(A,LINK,IMG等)中,则可以通过仅在引号内捕获或至少仅在HTML标记内捕获来更准确地定位URI.

编辑:哎呀,固定关闭paren问题.


Ale*_*lli 2

(http:/)?(/[\w.]+)+/?
Run Code Online (Sandbox Code Playgroud)

符合这些,但也许您有更严格的条件?