2014-03-30 36 views
0

我'嘗試使用正則表達式來得到URL只是文件名,例如:獲取文件名與正則表達式PHP

$link = "http://localhost/website/index.php"; 

$pattern = '/.*?\.php'; 

preg_match($pattern, $link, $matches); 

但它返回「//localhost/website/index.php」而不是「index」。

+0

你可以像總指揮官 – Smash

+0

那樣在文件瀏覽器中得到一個文件名請解釋你的意思是什麼? –

回答

2

你的代碼是否運行?你還沒有使用任何分隔符...

隨着preg_match,你可以使用一個否定類代替,因爲/匹配的第一個/然後.*?將所有字符匹配,以.php ...如果你想獲得只有index,它會使用最簡單的捕獲組,如下所示:

$link = "http://localhost/website/index.php"; 
$pattern = '~([^/]+)\.php~'; 
preg_match($pattern, $link, $matches); 
echo $matches[1]; # Get the captured group from the array $matches 

enter image description here

或者你可以簡單地使用basename功能:

echo basename($link, ".php"); 
+0

感謝它的工作,但是〜意味着什麼? –

+1

@AhmedDousa這是一個分隔符。我可以使用'|'來代替,或'''''''或'@'等。如果我使用了'/'作爲分隔符,我將不得不使用這樣的模式:'/([^ \ /] +)\。php /'(即我需要在模式中轉義所有'/')。如果我的模式有'/',我通常使用'〜',這樣我就不需要轉義它們了,這個符號很少見,所以最好使用。 – Jerry

+1

@Jerry,我在圖片的幫助下添加了一個解釋。希望你不介意:) –

1

我認爲你會最好使用專門爲目的的功能,而不是一個自定義的正則表達式。

既然你提供的例子實際上是一個URL,你可以使用parse_url功能:

http://php.net/manual/en/function.parse-url.php

你也應該看看pathinfo(做得好PHP的命名一致性那裏!):

http://php.net/manual/en/function.pathinfo.php

然後,您可以做這樣的事情:

$url = 'http://localhost/path/file.php'; 
$url_info = parse_url($url); 
$full_path = $url_info['path']; 
$path_info = pathinfo($full_path); 
$file_name = $path_info['filename'] . '.' . $path_info['extension']; 

print $file_name; // outputs "file.php" 

這看起來可能比使用正則表達式更冗長,但它可能會更快,而且更重要的是,更加健壯。