Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我有一个这样的字符串
image/jpeg; name="3.jpg"
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);
但它并没有拔出名字。你能指导我哪里做错了吗
你的问题是这样的:
.*(name=(.+))?$
首先,.*匹配直到字符串结尾的所有内容。
.*
然后,(name=(.+))?不能匹配任何东西,但由于它是可选的,那没关系。所以匹配成功,但是什么都没有捕获。
(name=(.+))?
/^.*image\/(?:GIF|PNG|JPG|JPEG).*?(?:name=(.+))?$/i
在这种情况下会有所帮助,使.*?匹配尽可能少的字符。image(此外,除非您使用and区分大小写,否则您可以使用修饰符name缩短正则表达式。)/i
.*?
image
name
/i
如果您只需要文件名,您也可以使其他组不捕获((?:...))。
(?:...)