使用 PHP 分解字符串两次

Explode String twice using PHP

我在 SO & 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 

在控制器中有没有最好的方法来完成这个任务。

https://ideone.com/XGwrTc

echo basename($image['img_link'], '.jpg');

如果您有不同的文件扩展名,另一种选择:

echo pathinfo ( $image['img_link'] ,  PATHINFO_FILENAME );

explode returns一个数组,所以需要访问第一个元素:

$ids = explode('/', $image['img_link'];
$id2 = explode('.', end($ids));

echo $id2[0];

或者,您可以只使用 basename() 而不是第一个 explode()(假设您总是有 .jpg 扩展名):

echo basename($image['img_link'], '.jpg');

对于您的情况,您可以使用简单的正则表达式。

([^\/]+)\.jpg$

在 php 中看起来像这样

preg_match('/([^\/]+)\.jpg$/', $image['img_link'], $m);
echo $m[1];

如果您需要它用于任何扩展,您可以使用它

([^\/]+)\.[^\.]+$

那么这是如何工作的:

我们从右边开始,所以我们在 $ 结尾的行添加一个锚点。从那里开始,我们想要扩展,这几乎是所有期望点 [^\.]+。剩下的是文件名,它是从点到斜杠 [^\/]+ 的所有内容。这部分也包含在捕获组 () 中,最后用 $m[1].

访问它

您可以使用正则表达式

此模式可行:

(\d{6}-\d{5}-\d{4})

细分:

  • \d表示"Any Digit"
  • {#}表示#值的计数,当然还有数字之间的破折号。
  • 用括号括起来以捕获整个结果

代码:

$string = "catalog/reviews/249532-20691-5369.jpg";

preg_match('(\d{6}-\d{5}-\d{4})', $string, $result);
echo $result[0];

输出:

249532-20691-5369