我有一个像这样的字符串
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);
但它没有拔出名字。你能指导我在哪里做错了吗
答案 0 :(得分:0)
你的问题是:
.*(name=(.+))?$
首先,.*
匹配所有内容,直到字符串结束。
然后,(name=(.+))?
无法匹配任何内容,但由于它是可选的,所以没关系。所以比赛成功了,但没有抓到任何东西。
/^.*image\/(?:GIF|PNG|JPG|JPEG).*?(?:name=(.+))?$/i
在这种情况下,会有所帮助,使.*?
匹配尽可能少的字符。 (另外,除非您对image
和name
区分大小写,否则可以使用/i
修饰符缩短正则表达式。)
如果您只需要文件名,则也可以使其他组无法捕获((?:...)
)。