我在SO here和here上看到了两个类似的问题,但仍然停留在...
我有一个像catalog/reviews/249532-20691-5369.jpg
这样的文件路径字符串,并且我只想获取像249532-20691-5369
这样的数字。
我正在使用以下方法:
$id1 = explode('/', $image['img_link']);
$id2 = explode('.', $id1[2]);
echo $id2; //output 249532-20691-5369
在控制器中是否有最佳方法来完成此任务。
答案 0 :(得分:7)
echo basename($image['img_link'], '.jpg');
具有不同文件扩展名的替代方法:
echo pathinfo ( $image['img_link'] , PATHINFO_FILENAME );
答案 1 :(得分:1)
您可以使用简单的正则表达式。
([^\/]+)\.jpg$
在php中看起来像这样
preg_match('/([^\/]+)\.jpg$/', $image['img_link'], $m);
echo $m[1];
如果您需要任何扩展名,可以使用此
([^\/]+)\.[^\.]+$
这是如何工作的:
我们从右边开始,因此我们在行$
的末尾添加了一个锚点。从那里开始,我们需要扩展,几乎所有扩展都期望指向[^\.]+
。剩下的就是文件名,这是从点到到达斜杠[^\/]+
的所有内容。该部分也被包含在捕获组()
中,最后以$m[1]
对其进行访问。
答案 2 :(得分:0)
explode
返回一个数组,因此您需要访问第一个元素:
$ids = explode('/', $image['img_link'];
$id2 = explode('.', end($ids));
echo $id2[0];
或者,您可以只使用basename()
而不是前一个explode()
(假设您始终使用.jpg
扩展名):
echo basename($image['img_link'], '.jpg');
答案 3 :(得分:0)
您可以使用正则表达式
此模式将起作用:
(\d{6}-\d{5}-\d{4})
故障:
\d
的意思是“任何数字” {#}
表示#个值的计数,当然还有数字之间的破折号。代码:
$string = "catalog/reviews/249532-20691-5369.jpg";
preg_match('(\d{6}-\d{5}-\d{4})', $string, $result);
echo $result[0];
输出:
249532-20691-5369