我'嘗試使用正則表達式來得到URL只是文件名,例如:獲取文件名與正則表達式PHP
$link = "http://localhost/website/index.php";
$pattern = '/.*?\.php';
preg_match($pattern, $link, $matches);
但它返回「//localhost/website/index.php
」而不是「index
」。
我'嘗試使用正則表達式來得到URL只是文件名,例如:獲取文件名與正則表達式PHP
$link = "http://localhost/website/index.php";
$pattern = '/.*?\.php';
preg_match($pattern, $link, $matches);
但它返回「//localhost/website/index.php
」而不是「index
」。
你的代碼是否運行?你還沒有使用任何分隔符...
隨着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
或者你可以簡單地使用basename
功能:
echo basename($link, ".php");
感謝它的工作,但是〜意味着什麼? –
@AhmedDousa這是一個分隔符。我可以使用'|'來代替,或'''''''或'@'等。如果我使用了'/'作爲分隔符,我將不得不使用這樣的模式:'/([^ \ /] +)\。php /'(即我需要在模式中轉義所有'/')。如果我的模式有'/',我通常使用'〜',這樣我就不需要轉義它們了,這個符號很少見,所以最好使用。 – Jerry
@Jerry,我在圖片的幫助下添加了一個解釋。希望你不介意:) –
我認爲你會多最好使用專門爲目的的功能,而不是一個自定義的正則表達式。
既然你提供的例子實際上是一個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"
這看起來可能比使用正則表達式更冗長,但它可能會更快,而且更重要的是,更加健壯。
你可以像總指揮官 – Smash
那樣在文件瀏覽器中得到一個文件名請解釋你的意思是什麼? –