正则表达式来拉取图像名称

时间:2013-02-01 11:31:03

标签: php regex

我有一个像这样的字符串

image/jpeg; name="3.jpg"

我想通过php正则表达式提取3.jpg。我正在使用

$test='image/jpeg; name="3.jpg"';

preg_match('/^.*image\/(gif|png|jpg|jpeg|GIF|PNG|JPG|JPEG).*(name=(.+))?$/',$test, $matches);

但它没有拔出名字。你能指导我在哪里做错了吗

1 个答案:

答案 0 :(得分:0)

你的问题是:

.*(name=(.+))?$

首先,.*匹配所有内容,直到字符串结束。

然后,(name=(.+))?无法匹配任何内容,但由于它是可选的,所以没关系。所以比赛成功了,但没有抓到任何东西。

/^.*image\/(?:GIF|PNG|JPG|JPEG).*?(?:name=(.+))?$/i
在这种情况下,

会有所帮助,使.*?匹配尽可能少的字符。 (另外,除非您对imagename区分大小写,否则可以使用/i修饰符缩短正则表达式。)

如果您只需要文件名,则也可以使其他组无法捕获((?:...))。