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

を得る;.両方の方法で作業する必要がありますか?

私は以下の作業をしていますが、それはかなり醜いです、どうすればそれを行うことができますか?

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

迅速なハックですスラッシュ上のあなたのURLを爆発させてから、配列の最後の2つのインデックスを見てください。 – Scuzzy

答えて

1

を選択されていることを確認するために前方の負の外観を使用しました

implode('_', array_slice(explode('/', rtrim($url, '/')), -2, 0)) 
3

私はあなたの現在の方法が良いと主張したいと思います。それは簡潔で意味があり、過度に複雑ではありません。

あなたは正規表現を使用したい場合は、正規表現を試みることができる(@の代わり/の区切りである、それは少し単純エスケープます):

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

とグループ\1_\2は、あなたの$myvarだろう。

正規表現は、/から始まり、持っているあなたの文字列のビットを探し、正確に1がない次のテキスト文字列の末尾に/、その場合にはあなたが持つことができない限り(文字列で/より1つ余分)。 (文字列の終りを意味する正規表現の '$'に注意してください)。

2

少し醜い(おそらくもっと速い)方法があります。私は試合だけ別の方法としては、このようにそれを行うことができ、最後のブロック

1
preg_match('%/([^/]+)/([^/]+)/(?!.*/)%', $subject, $result) 

<?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 
?> 
関連する問題