我正在尝试使用正则表达式从URL获取文件名,例如:
$link = "http://localhost/website/index.php";
$pattern = '/.*?\.php';
preg_match($pattern, $link, $matches);
但它返回“//localhost/website/index.php
”而不是“index
”。
答案 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
或者您只需使用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"
这似乎比使用正则表达式更冗长,但它可能更快,更重要的是,更强大。