使用 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
在控制器中有没有最好的方法来完成这个任务。
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
我在 SO
我有一串像 catalog/reviews/249532-20691-5369.jpg
这样的文件路径,我只想得到像 249532-20691-5369
这样的数字。
我正在使用以下方法:
$id1 = explode('/', $image['img_link']);
$id2 = explode('.', $id1[2]);
echo $id2; //output 249532-20691-5369
在控制器中有没有最好的方法来完成这个任务。
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