有沒有在PHP的方式做的preg_match上一個網址,如下所示的preg_match動態URL
動態/動態的/ dev/new_mobile/lib目錄
,它只會拉出來dev/new_mobile
和鏈接也必須這樣太
的能力動態/動態/動態/ TST/new_mobile/lib目錄
在上面的例子中,它只會拉出tst/new_mobile
。關鍵是它會在lib之前抓取最後兩個目錄。任何想法如何做到這一點?
有沒有在PHP的方式做的preg_match上一個網址,如下所示的preg_match動態URL
動態/動態的/ dev/new_mobile/lib目錄
,它只會拉出來dev/new_mobile
和鏈接也必須這樣太
的能力動態/動態/動態/ TST/new_mobile/lib目錄
在上面的例子中,它只會拉出tst/new_mobile
。關鍵是它會在lib之前抓取最後兩個目錄。任何想法如何做到這一點?
這裏有一個正則表達式,將讓你想要的部分:
$url = 'dynamic/tst/new_mobile/lib/foo/bar';
if (preg_match('#^(?:.*?/)?([^/]+/[^/]+)/lib(?:/.+)?$#', $url, $matches)) {
$part = $matches[1];
var_dump($part); // "tst/new_mobile"
}
這將得到lib目錄前的2個目錄允許前後任何目錄。它也將匹配幾個邊緣情況,你不提你是否需要:
tst/new_mobile/lib/foo/bar
/tst/new_mobile/lib/foo/bar
只是爆炸然後倒陣,簡單易用。
$array_url = explode('/',$url);
$tmp_array_url = array_reverse($array_url);
那麼你可以重建,因爲你會,不需要懷疑有多少動態部分來之前。
echo $tmp_array_url[0]; // "lib";
echo $tmp_array_url[1]; // "new_mobile";
echo $tmp_array_url[2]; // "dev";
編輯:既然你有LIB不變,只是做這樣的事情:
$the_two_before = "";
for($i = 0; $i < count($tmp_array_url); $i++){
if($tmp_array_url[$i] == "lib"){
$the_two_before = $tmp_array_url[$i+2]."/".$tmp_array_url[$i+1];
}
}
你試過了什麼?讓我們知道,如果你有問題http://php.net/manual/en/function.preg-match.php – rdlowrey 2012-01-13 18:34:01
以及事情是開發和new_mobile也可以改變,我忘了提及可能有更多的目錄在lib之後。唯一不變的是在lib之前有兩個我需要抓取的目錄 – Alex 2012-01-13 18:49:49
您是否嘗試過使用'preg_match'?因爲它幾乎可以處理任何你可以扔在它上面的東西。或者是你的問題*「請爲我寫我的正則表達式,因爲我不知道如何」*? – rdlowrey 2012-01-13 19:06:30