提取最后一个斜杠和问号之间的文件名

时间:2016-08-11 05:00:27

标签: php regex

我想使用正则表达式在最后一个斜杠和问号之间提取文件名 我读了一些相关的答案

([^/]*$)

但我有几个域名,所以我想提取特定名称的文件名,并寻找适用于所有域名的正则表达式。 我如何将其限制在某些域名? 我的目标是替换域名,

http://old.domain.com/asda/dsdasd/fsdfd/bvc/filename.mp4?fdgfsdgfgfsgf
http://new.domain.com/filename.mp4

此致

2 个答案:

答案 0 :(得分:1)

对于您的此特定问题,请使用此解决方案,或者请使用示例

详细说明您的问题
<?php
$url = 'http://old.domain.com/asda/dsdasd/fsdfd/bvc/filename.mp4?fdgfsdgfgfsgf';
//var_dump(parse_url($url));

$scheme= parse_url($url, PHP_URL_SCHEME);   // http
$host = parse_url($url, PHP_URL_HOST);   //old.domain.com
$path = parse_url($url, PHP_URL_PATH);  //asda/dsdasd/fsdfd/bvc
$filename = basename($path); //filename.mp4
echo $newUrl = $scheme.'//new.domain.com/'.$filename;
?>

输出

http//new.domain.com/filename.mp4

有关parse_url的更多信息,请阅读http://php.net/manual/en/function.parse-url.php

答案 1 :(得分:0)

你可以尝试

preg_replace('/(.*:\/\/).*\/(.*?)(\?.*|$)/', '$1new.domain.com/$2', $url );

用新的域替换完整的域和路径。

See it here at Ideone

修改

或者,如果您确实需要提取文件名(正如您在问题中所说),请尝试

preg_match('/[^\/]+?(?=\?|$)/', $url, $matches);

as showed here.