0

我有一个这样的字符串

image/jpeg; name="3.jpg"

3.jpg我想通过php正则表达式退出。我在用

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

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

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

4

1 回答 1

0

你的问题是这样的:

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

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

然后,(name=(.+))?不能匹配任何东西,但由于它是可选的,那没关系。所以匹配成功,但是什么都没有捕获。

/^.*image\/(?:GIF|PNG|JPG|JPEG).*?(?:name=(.+))?$/i

在这种情况下会有所帮助,使.*?匹配尽可能少的字符。image(此外,除非您使用and区分大小写,否则您可以使用修饰符name缩短正则表达式。)/i

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

于 2013-02-01T11:40:29.947 回答