用正则表达式php获取文件名

时间:2014-03-30 06:41:58

标签: php regex url preg-match

我正在尝试使用正则表达式从URL获取文件名,例如:

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

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

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

但它返回“//localhost/website/index.php”而不是“index”。

2 个答案:

答案 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");

答案 1 :(得分:1)

我认为使用专用于此目的的函数而不是自定义正则表达式会更好

由于您提供的示例实际上是一个URL,因此您可以使用parse_url函数:

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

你还应该看一下pathinfo(那里的命名一致性做得很好!):

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"

这似乎比使用正则表达式更冗长,但它可能更快,更重要的是,更强大。