Использование glob() для получения имен файлов без "v[0-9]"
Я умею пользоваться glob()
чтобы получить все файлы изображений в каталоге, но я хочу сэкономить время поиска и выбрать только те, которые мне нужны в первую очередь.
Я создаю веб-сайт автосалона, и есть каталог, где хранятся все фотографии автомобилей. Фотографии, связанные с транспортным средством для продажи, начинаются с буквы "v", затем с идентификатором базы данных, а затем с точкой перед моделью транспортного средства.
Вот примерный список файлов в каталоге:
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.jpg
, 2014.ford.escape.0.jpg
, 2014.ford.escape.1.jpg
должен быть возвращен glob()
,
Я надеюсь, что это возможно без извлечения всех файлов изображений и последующего просмотра массива с помощью регулярных выражений, потому что 90% извлекаемых изображений не понадобятся.
2 ответа
Я надеюсь, что это возможно без извлечения всех файлов изображений и последующего просмотра массива с помощью регулярных выражений, потому что 90% извлекаемых изображений не понадобятся.
Если в каталоге нет слишком большого количества файлов, об этом не стоит беспокоиться. glob()
внутренне приходится перебирать все файлы в папке, чтобы в любом случае сверять их имена с шаблоном; делать это в коде PHP с регулярным выражением будет одинаково хорошо.
Если в каталоге действительно очень много файлов... не делайте этого. Большие каталоги в целом работают очень плохо, и многие файловые системы имеют ограничения на количество файлов в папке. (Например, файловая система ext3, распространенная в старых системах Linux, имеет ограничение в 32 768 файлов в одном каталоге.) Разделите их на несколько каталогов.
Чтобы ответить на вопрос напрямую, однако, нет никакого способа сделать это с glob()
шаблон. Можно сопоставить все файлы, имена которых начинаются таким образом, но нет способа инвертировать совпадение. (Вы можете проверить [^v]*
а также v[^0-9]*
как два отдельных шаблона, но нет возможности объединить их в один шаблон.)
Если вы уверены, что файлы, которые вы не хотите извлекать, начинаются с буквы v
или начинается с v
сопровождаемый любым digit
Вы можете попробовать использовать следующее регулярное выражение
^[^v]+$|^v[^\d].+
проверить демо