使用glob()获取没有“v [0-9]”的文件名

时间:2015-05-16 03:40:02

标签: php regex glob scandir

我知道如何使用glob()来获取目录中的所有图像文件,但我想节省检索时间,并且只是首先获取我需要的文件。

我正在建立汽车经销商网站,并且有一个存储所有车辆照片的目录。与待售车辆相关联的照片以字母“v”开始,然后是数据库ID,然后是车辆模型之前的点。

以下是目录中文件的示例列表:

v313.2014.toyota.camry.0.jpg
v313.2014.toyota.camry.1.jpg
fordfusion.jpg
fordfusion2.jpg
v87.2015.honda.civic.0.jpg
v87.2015.honda.civic.1.jpg
2014.ford.escape.0.jpg
2014.ford.escape.1.jpg

在这些文件中,fordfusion.jpg只能返回fordfusion2.jpg2014.ford.escape.0.jpg2014.ford.escape.1.jpgglob()

我希望在没有检索所有图像文件然后使用正则表达式遍历数组的情况下这是可能的,因为90%的图像都不是必需的。

2 个答案:

答案 0 :(得分:1)

  

我希望在没有检索所有图像文件然后使用正则表达式遍历数组的情况下这是可能的,因为90%的图像都不是必需的。

除非目录中有个大量文件,否则不值得担心。 glob()内部必须遍历文件夹中的所有文件,无论如何都要根据模式检查其名称;使用正则表达式在PHP代码中执行它将同样表现良好。

如果目录中确实存在大量文件......请不要这样做。大型目录通常表现很差,许多文件系统对文件夹中的文件数量有限制。 (例如,ext3文件系统,在较旧的Linux系统上很常见,在一个目录中限制大约32,768个文件。)将它们分成多个目录。

但是,要直接回答这个问题,使用glob()模式无法做到这一点。可以匹配的所有文件以这种方式开头的名称,但是没有办法反转匹配。 (您可以将[^v]*v[^0-9]*检查为两个单独的模式,但无法将它们合并为单个模式。)

答案 1 :(得分:0)

如果您确信不想检索的文件以字母v开头,或以v开头,后跟任何digit,您可以尝试使用以下正则表达式< / p>

^[^v]+$|^v[^\d].+

检查Demo