2012-02-20 42 views
0
Given 
http://host/test/google/oop/a/a 

我試圖檢索由/分隔的最後兩個元素,所以我可以做 $ MYVAR =「A_A」;可能會有結局/或者不需要雙向工作。正則表達式得到目錄的最後兩條路徑

我有以下工作,但它很醜,我該怎麼辦呢?

$href = preg_split("/[\/]+/", "http://host/test/google/oop/a/a"); 
$myvar = $href[count($href)-3] . "_" . $href[count($href)-2];  
+0

快速黑客會是要在斜槓上分解您的URL,然後查看數組的最後兩個索引。 – Scuzzy 2012-02-20 05:21:28

回答

1

或者你可以這樣來做:

<?php 
$link = 'http://host/test/google/oop/a/a'; 

$linkParts=explode('/',rtrim($link,'/')); 
$count=count($linkParts); 

$desired = $linkParts[$count-2].'_'.$linkParts[$count-1]; 

echo $desired; //a_a 
?> 
3

我認爲你現在的方法很好 - 它很簡潔,很有道理,而且不會過於複雜。

如果你想使用正則表達式,你可以嘗試正則表達式(@是分隔符,而不是/,它使逃逸簡單一些):

@/([^/]+)/([^/]+)/[email protected] 

和團體\1_\2將是你$myvar

正則表達式查找的字符串,從一個/開始,有位正是1字符串中更/(除非有/在沒有下面的文本字符串的結束,在這種情況下,你可以有一個額外的)。 (請注意正則表達式中的'$',意思是「字符串的結尾」)。

2

有一點不那麼醜陋(也許更快)的方式。

implode('_', array_slice(explode('/', rtrim($url, '/')), -2, 0)) 
1
preg_match('%/([^/]+)/([^/]+)/(?!.*/)%', $subject, $result) 

我已經使用了負前瞻,以確保比賽只選擇最後一個塊