使用正则表达式php获取文件名
我正在尝试使用正则表达式从URL获取文件名,例如:使用正则表达式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,您可以使用一个否定类,因为/匹配第一个/然后*?将匹配所有字符
$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,我借助图像添加了一个解释。希望你不介意:)