如何从url字符串中仅提取文件名

时间:2017-03-22 23:04:18

标签: php url substring filenames

我有一个网址,其中第一部分的结构总是在变化,而最后一部分则没有。

使用此网址作为输入:

https://ig-s-b-a.akamaihd.net/hphotos-ak-xfa1/t51.2885-19/17438789_1884899458414605_8605163171642081280_a.jpg

我想捕获:

/17438789_1884899458414605_8605163171642081280_a.jpg

我可以使用preg_match()吗?

其他捕获的文件名如下所示:

/17438789_1884899458414605_8605163171642081280_a.jpg
/17438789_111111111111_862222222222222642081280_a.jpg
/1741111111111789_1555555555605_812222222081280_a.jpg

2 个答案:

答案 0 :(得分:0)

你这里不需要正则表达式。您可以使用/进行爆炸并获取数组的最后一项

$str=" https://ig-s-b-a.akamaihd.net/hphotos-ak-xfa1/t51.2885-19/17438789_1884899458414605_8605163171642081280_a.jpg";
$array=explode("/",$str);
echo end($array);

答案 1 :(得分:0)

与使用preg_match()的正则表达式模式创建单个元素数组或使用explode()创建多元素数组以提取最后一个元素相比,有两种更好/更有效的方法。 / p>

输入:

$str="https://ig-s-b-a.akamaihd.net/hphotos-ak-xfa1/t51.2885-19/17438789_1884899458414605_8605163171642081280_a.jpg";

方法#1 - 使用basename() concat /

echo "/",basename($str);

方法#2 - 在strrpos()内搜索/ substr()

echo substr($str,strrpos($str,"/"));

输出(使用任一方法):

/17438789_1884899458414605_8605163171642081280_a.jpg

注意 使用上述任一方法array_map(),只需一行代码就可以从完整网址数组中快速生成过滤数组

$array=['https://ig-s-b-a.akamaihd.net/hphotos-ak-xfa1/t51.2885-19/17438789_1884899458414605_8605163171642081280_a.jpg',
'https://ig-s-b-a.akamaihd.net/hphotos-ak-xfa1/t51.2885-19/17438789_111111111111_862222222222222642081280_a.jpg',
'https://ig-s-b-a.akamaihd.net/hphotos-ak-xfa1/t51.2885-19/1741111111111789_1555555555605_812222222081280_a.jpg'];

$array=array_map(function($v){return "/".basename($v);},$array);
var_export($array);

数组输出:

array (
  0 => '/17438789_1884899458414605_8605163171642081280_a.jpg',
  1 => '/17438789_111111111111_862222222222222642081280_a.jpg',
  2 => '/1741111111111789_1555555555605_812222222081280_a.jpg',
)