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

使用正则表达式php获取文件名,php,regex,url,preg-match,Php,Regex,Url,Preg Match,我正在尝试使用正则表达式从URL获取文件名,例如: $link = "http://localhost/website/index.php"; $pattern = '/.*?\.php'; preg_match($pattern, $link, $matches); 但是它返回“//localhost/website/index.php”而不是“index”您的代码是否运行?您没有使用任何分隔符 使用preg\u match,您可以使用一个否定类,因为/匹配第一个/然后*?将匹配所有字符

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

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

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

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

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

您的代码是否运行?您没有使用任何分隔符

使用
preg\u match
,您可以使用一个否定类,因为
/
匹配第一个
/
然后
*?
将匹配所有字符,直到
.php
。。。如果您只想获取
索引
,那么使用这样的捕获组将是最简单的:

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

或者,您可以简单地使用以下功能:

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

你的代码运行了吗?您没有使用任何分隔符

使用
preg\u match
,您可以使用一个否定类,因为
/
匹配第一个
/
然后
*?
将匹配所有字符,直到
.php
。。。如果您只想获取
索引
,那么使用这样的捕获组将是最简单的:

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

或者,您可以简单地使用以下功能:

echo basename($link, ".php");
我认为最好使用专用于此目的的函数,而不是自定义正则表达式

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

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

您还应该查看
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"
这似乎比使用正则表达式更冗长,但它可能更快,更重要的是,更健壮。

我认为使用专用函数比使用自定义正则表达式要好得多

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

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

您还应该查看
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"

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

您可以在文件浏览器中获得文件名,如total Commander请解释您的意思?您可以在文件浏览器中获得文件名,如total Commander请解释您的意思?@AhmedDousa这是一个分隔符。我本可以用
来代替,或者
-
或者
或者
@
等等。但是,如果我用
/
作为分隔符,我就不得不这样使用模式:
/([^\/]+)\.php/
(也就是说,我需要转义模式中的所有
/
)。如果我的图案有任何
/
,我通常会使用
~
,这样我就不需要逃避它们,而且这个符号非常罕见,所以最好使用它。@Jerry,我借助图像添加了一个解释。希望你不介意:)@AhmedDousa这是一个分隔符。我本可以用
来代替,或者
-
或者
或者
@
等等。但是,如果我用
/
作为分隔符,我就不得不这样使用模式:
/([^\/]+)\.php/
(也就是说,我需要转义模式中的所有
/
)。如果我的图案有任何
/
,我通常会使用
~
,这样我就不需要逃避它们,而且这个符号非常罕见,所以最好使用它。@Jerry,我借助图像添加了一个解释。希望你不介意:)