正则表达式从文件中获取图像名称

时间:2015-09-02 10:23:08

标签: php regex

我正在尝试从上传的文件中提取所有图像名称及其路径。我正在寻找合适的正则表达式。

字符串很大但是一个部分看起来像:

  

..... [{\" name \":\" Aluminum_Black_mat \",\" id \":\&#34 ; b3281b09-88be-4e9b-9fc2-514cbaae0a0e \" \" backFaceCulling \":真,\"线框\":假,\"环境\":[0.0,0.0,0.0],\"弥漫\":[1.0,1.0,1.0],\"镜面\":[0.0,0.0 ,0.0],\"发射\":[0.0,0.0,0.0],\" specularPower \":2.56,\"阿尔法\&#34 ;: 1.0,\" diffuseTexture \":{\"名称\":\" BlackRailing.jpg \" \"电平\&# 34;:1.0,\" hasAlpha \":假,\" getAlphaFromRGB \":假,\" coordinatesMode \":0,\&# 34; isCube \":假,\" uOffset \":0.0,\" VOFFSET \":0.0,\" USCALE \" :1.0,\" VSCALE \":1.0,\" uAng \":0.0,\" VANG \":0.0,\"王\":0.0,\" wrapU \":1,\" wrapV \":1,\" coordinatesIndex \":0 ,\" isRenderTarget \":假,\" renderTargetSize \":0,\" mirrorPlane \":空,\" renderList \ ":null,\"动画\":[]},\" diffuseFresnelParameters \ .... ETC

在那个字符串中有BlackRailing.jpg。这就是我需要得到的东西。如果它有一条路我也想得到它。基本上这些引用之间的所有内容,只有它是一个图像。我已经在http://www.regexr.com/上徘徊了一段时间,我无法让它完美匹配。当我运行以下内容时,我总是在第一个引用之前得到所有内容。

preg_match_all('/[ :]".*.(jpe?g|png|bmp)/i', $buffer, $matches);

我对正则表达式非常糟糕,任何有关正确的php正则表达式的帮助都会非常适合。

谢谢!

1 个答案:

答案 0 :(得分:3)

当您将JSON文件视为文本文件时,您可以使用preg_replace方法,例如,假设:与值之间没有空格:

preg_match('/(?<=:")[^"]*\.(?:jpe?g|png|bmp)/i', $buffer, $matches);

请参阅regex demo

(?<=:") look-behind只检查:"但不捕获它。

请注意,如果:"之间只有一个空格,则可以使用'/(?<=:[ ]")[^"]*\.(?:jpe?g|png|bmp)/i'正则表达式,但如果可能有更多,则需要采用捕获组方法