preg_match 懒惰模式?

3

嘿,大家好,我想在表达式中去掉最后的 _1.jpg(如果存在),但我遇到了一些问题。

情况如下:

image_name_1.jpg(应该是 image_name.jpg)

image_name_1_1.jpg(应该是 image_name_1.jpg)

我想到了这个方法,但它似乎返回 null:

$pic = ($pic[strlen]-6 == '_') ? preg_replace('/*.\_[0-9]/', '.jpg', $pic) : $pic;

我的公式有什么问题吗?能有人帮忙吗?


只需使用一次str_replace将“_1.jpg”替换为“.jpg”。 - hackartist
如果是_2,或者_4或_9呢?这不仅限于单个整数,因此使用[0-9] - ehime
3个回答

3
< p > *. 在这里会带来麻烦。你可以使用 *.? - ? 表示懒惰匹配。

但是你的表达式不必匹配整个输入字符串,只需要匹配目标字符串即可 - 参见 ohaal 的回答。


这个问题已经超过一年了 =) - ehime

2
这应该就可以了:
preg_replace('/_\d\.jpg$/', '.jpg', $pic);

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接