Я ценю, что вы указали на это, хотя. Большая помощь и спасибо :)

аюсь перечислить файлы в каталоге (рекурсивный или не) с PHP, где имя файла соответствует определенному шаблону. Я никогда не был слишком хорош в регулярных выражениях, поэтому любая помощь, которую вы могли бы предложить, была бы великолепна. Я мог бы найти буквальную проверку возвращаемых имен файлов, но я думаю, что это не такая уж хорошая идея :)

Обновление + окончательное решение: 18.01.2011 @ 20:06

Я нашел другой способ сделать то, что искал, как только понял немного регулярное выражение. Конечно, я был полностью разочарован тем, где я находился с регулярным выражением, теперь я получаю кое-что от него благодаря другу, который тянет меня в сторону, чтобы объяснить кое-что из этого в более простых терминах, чем я нашел в онлайн-руководствах.

Это решение в основном проверяет наличие определенных изображений с начальным префиксом «prefixone» или «prefixtwo», а также проверяет, является ли это изображение определенного типа (jpg, jpeg, png) и соответствует любому из следующих форматов. ,

В зависимости от слага, который вы передали из Wordpress (где я его использовал), он будет совпадать с этим регулярным выражением. Вот пример листинга:

prefixone.123-abc._tag1.001.jpg
prefixone.345-xyz._tag1.002.jpeg
prefixtwo.123-abc._tag2._tag1.003.jpg
prefixone.123-abc._tag2.004.jpeg
prefixtwo.345-xyz._tag2._tag3._tag1.005.jpg
prefixtwo.123-abc._tag1.001.jpg
prefixone.345-xyz._tag1.001.png
prefixtwo.456-rst._tag1.001.png

Все эти файлы, которые могли быть потенциально возвращены в листинге файлов нашей функцией opendir (), любой из них мог бы быть совпадением, если слаг соответствовал. Независимо от порядка пометки информации в имени файла.

Я надеюсь, что это поможет другому пользователю, борющемуся с регулярным выражением. Привыкнуть к боли очень сложно, но как только вы понимаете несколько фундаментальных вещей, все остальное начинает быстро становиться на свои места, чтобы начать строить свои собственные.

Код:

<?php
// create an array to hold directory list
$results = array();

// create a handler for the directory
$directory = $_SERVER['DOCUMENT_ROOT'].'/some/path/to/images/';
$handler = opendir($directory);

// open directory and walk through the filenames
while ($file = readdir($handler)) {

    // if file isn't this directory or its parent, add it to the results
    if ($file != "." && $file != "..") {

        // check with regex that the file format is what we're expecting and not something else
        if(preg_match('#^(prefixone|prefixtwo)[^\s]*\.'.$wordpress-slug.'\.[^\s]+(\.(jpg|jpeg|png))#', $file)) {

            // add to our file array for later use
            $results[] = $file;
        }
    }
}
?>

Мне на самом деле не требовалась рекурсия для этого, но на самом деле есть много рекурсивных примеров в Интернете, и это было действительно меньше всего из моих забот. В основе этой задачи лежала изоляция контента по шаблону, поэтому приведенного выше кода было достаточно.

Примечание:

Тем, кто указал на «принятые комментарии» вчера, я понятия не имел, что пропустил это, и я прошу прощения. У меня был плохой день. Извините, если мне показалось, что я зацепился за комментарии. Это отличное сообщество, и я с радостью верну, где смогу.

 Gordon17 янв. 2011 г., 23:16
 Will Ashworth17 янв. 2011 г., 23:09
Я ответил на некоторые из них, но там также говорится, что на 0 из 6 отвечающих критериям вопросов был дан ответ. Я даже не вижу, где те 6 областей, на которые он ожидает, чтобы я ответил.
 Will Ashworth17 янв. 2011 г., 23:10
Когда я вижу что-то, на что я могу внести свой вклад, я пытаюсь ответить или исследовать проблему для человека.
 Will Ashworth17 янв. 2011 г., 23:15
Да, я вижу это сейчас. Простите, ребята.

Ответы на вопрос(1)

Решение Вопроса

glob найти пути, соответствующие шаблону илиGlobIterator.

Если вам нужно, чтобы это было рекурсивнымиспользоватьRegexIterator иRecursiveDirectoryIterator.

Отметьте этот CW, потому что вопрос является дубликатом, и вы можете легко найти примеры для всего вышеперечисленного при использовании функции поиска. Пожалуйста, сделай так.

 Will Ashworth17 янв. 2011 г., 23:25
Я не искал RegexIterator, потому что он не приходил мне в голову. Не нужно звать меня за то, что я не ищу. Это первое, что я делаю перед тем, как что-то написать. Поиск быстрее.
 Will Ashworth17 янв. 2011 г., 23:25
Я ценю, что вы указали на это, хотя. Большая помощь и спасибо :)

Ваш ответ на вопрос