正则表达式 - 获取URL协议,主机,路径,但不是文件名 - PCRE

时间:2017-10-05 22:27:44

标签: regex pcre url-scheme

目标

替换主机和路径(位置),但保留文件名(它们不变)。

没有子域的URL - 不起作用

这适用于至少有一个子域的主机(域)(例如' www.somedomain.com'),但未能通过域+ TLD获取路径(例如&#39 ; somedomain.com&#39)

(http[s]?:\/\/([^:\/\s]+)(\/\w+)*\/)+

在以下HTML代码段

junk before tag <img src="https://somedomain.com/wp-content/uploads/2017/10/someimage.jpg" alt="" />Random text after

PCRE引擎只会捕获:

https://somedomain.com/

带有子域名的网址 - 正常工作

在以下HTML代码段中(域具有子域名)

junk before tag <img src="https://www.somedomain.com/wp-content/uploads/2017/10/someimage.jpg" alt="" />Random text after

PCRE引擎捕获整个URL(保存文件):

https://www.somedomain.com/wp-content/uploads/2017/10/

问题

如何调整正则表达式以捕获具有子域img src=""网址的完整协议,域 和路径 (但不是文件名) 以及 那些没有子域名?

1 个答案:

答案 0 :(得分:2)

https?:\/\/(?:[^\/ ]*\/)*

演示here

<强>解释

http      //Should start with http
s?        // s is optional
:\/\/     // should follow up with ://
(?:       //START Non capturing group
[^\/ ]*   //Any character but a / or a space
\/        //Ends with /
)         //END Non capturing group
*         //Repeat non-capturing group