我有一个网址,其中第一部分的结构总是在变化,而最后一部分则没有。
使用此网址作为输入:
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
答案 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',
)