我正在尝试从上传的文件中提取所有图像名称及其路径。我正在寻找合适的正则表达式。
字符串很大,但一个部分看起来像:
..... [{\"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);
(?<=:")
向后查找仅检查 :"
但没有捕获它。
请注意 :
之间是否有一个空格和"
,您可以使用'/(?<=:[ ]")[^"]*\.(?:jpe?g|png|bmp)/i'
正则表达式,但如果可能有更多,您将需要捕获组方法。
关于php - 从文件中获取图像名称的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32350607/