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

标签 php regex

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

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

..... [{\"name\":\"Aluminum_Black_mat\",\"id\":\"b3281b09-88be-4e9b-9fc2-514cbaae0a0e\",\"backFaceCulling\":true,\"wireframe\":false,\"ambient\":[0.0,0.0,0.0],\"diffuse\":[1.0,1.0,1.0],\"specular\":[0.0,0.0,0.0],\"emissive\":[0.0,0.0,0.0],\"specularPower\":2.56,\"alpha\":1.0,\"diffuseTexture\":{\"name\":\"BlackRailing.jpg\",\"level\":1.0,\"hasAlpha\":false,\"getAlphaFromRGB\":false,\"coordinatesMode\":0,\"isCube\":false,\"uOffset\":0.0,\"vOffset\":0.0,\"uScale\":1.0,\"vScale\":1.0,\"uAng\":0.0,\"vAng\":0.0,\"wAng\":0.0,\"wrapU\":1,\"wrapV\":1,\"coordinatesIndex\":0,\"isRenderTarget\":false,\"renderTargetSize\":0,\"mirrorPlane\":null,\"renderList\":null,\"animations\":[]},\"diffuseFresnelParameters\ .... ETC

该字符串中有 BlackRailing.jpg。这就是我需要得到的。如果它有一条路,我也想得到它。基本上是这些引用之间的所有内容,并且仅当它是图像时。我一直在闲逛http://www.regexr.com/有一段时间我无法让它完美匹配。当我运行以下命令时,我总是得到第一个引用之前的所有内容。

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

我对正则表达式真的很不擅长,任何有关 php 正确正则表达式的帮助都会非常感激。

谢谢!

最佳答案

当您将 JSON 文件视为文本文件时,您可以使用像这样的 preg_replace 方法假设 : 之间没有空格。和值:

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

参见regex demo

(?<=:")向后查找仅检查 :"但没有捕获它。

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

关于php - 从文件中获取图像名称的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32350607/

相关文章:

php - 使用 PHP 从 MySQL 数据库中获取数据,以表格形式显示以供编辑

php - 如何防止不同设备同时登录同一个账号?

php - 文件在 PHP 中乱写

php - CakePHP和用户登录功能

php - 如何检测 session 何时即将结束。 PHP

python - 匹配 Python 正则表达式中的\[\]

regex - 将驼峰大写更改为短划线分隔的小写的单个正则表达式

java - RegEx - 如何仅在存在其他字符时才允许空格

不应以某些特定两位数字开头的数字的正则表达式

python - 如何获取平衡括号组的内容