2017-08-22 57 views
-1

我想捕獲給定分隔符(斜槓)之間的URL中的所有組,但似乎無法找到解決方案,因爲完全匹配總是包含分隔符。正則表達式捕獲分隔符之間的每一位

例子:

http://www.example.com/**captureme**/**capturemetoo**/**capturemeaswell**/notme.php 

如果我用一個簡單的正則表達式,如#\/(.*?)\/#我得到比賽爲「captureme」和「capturemeaswell」但我失蹤「capturemetoo」。

的困難是塊的長度捉可以改變,比如我們還可以有:

http://www.example.com/group1/group2/group3/group4/group5/page.php 

如果每個組都需要被捕獲。

+3

我寧願使用'parse_url'來獲得路徑,然後簡單地將它分解爲斜槓...... – CBroe

+2

它是否必須是正則表達式?爲此,如果尋找一個通用的解決方案(對於這種情況,parse_url的確更好),我可以使用'parse_url($ url,PHP_URL_PATH)''explode()',也許''dirname()' –

+0

,你可以使用lookarounds用於匹配一個組而不消耗它,在你的情況下'#\ /(。*?)(?= \ /)#'。 '?='是一個積極的向前看。請注意,爲了與正則表達式約束保持一致,您將捕獲'http://'中的前兩個斜線之間的空白作爲第一個結果,儘管 – Kaddath

回答

1

你可以做到這一點通過以下方式

$re = '/([^\/]+\/)/'; 
$str = 
'http://www.example.com/group1/group2/group3/group4/group5/page.php'; 

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0); 

// Print the entire match result 
// pop the first 2 matches 
var_dump(array_slice($matches,2)); 

它將匹配HTTP和域名,但可以使用片

被刪除

看到它在online compiler

+0

+1。然而,根據CBroe和Michael Berkowsi的建議,我想我會去parse_url()和explode()php內建函數 – Paws