2017-10-05 97 views
0

目標

更換主機和路徑(位置),但保留文件名(它們是不變)。正則表達式 - 獲取URL協議,主機,路徑,而不是文件名 - PCRE

無子域網址 - 不工作

這適用於主機(域)是至少有一個子域(例如,「www.somedomain.com」),但沒有隻域,以獲得路徑+ TLD(例如 'somedomain.com')

(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/ 

URL 子域 - 工程

在下面的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=""網址有子域以及那些沒有子域?

+0

所以呢?我並不十分清楚所需的輸出是什麼。 – CAustin

+0

在第一個例子中,我想要'https:// somedomain/wp-content/uploads/2017/10 /',但我只能得到'https:// somedomain /'。第二個例子按預期工作。 – Baker

回答

1
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 
在要返回`www.somedomain.com`第二個例子
+0

這個技巧。謝謝。 – Baker