Encontre todos os arquivos no diretório com string ou padrão no nome do arquivo com PHP

Eu estou tentando listar arquivos em um diretório (recursivo ou não) com PHP, onde o nome do arquivo corresponde a um determinado padrão. Eu nunca fui muito bom com regex, então qualquer ajuda que você poderia oferecer seria ótimo. Eu poderia procurar uma verificação literal dos nomes de arquivos retornados, mas acho que não é uma ótima idéia :)

Atualização + solução final: 18/1/2011 às 20:06

Encontrei outra maneira de fazer o que estava procurando, depois que entendi um pouco mais sobre regex. É verdade que fiquei totalmente frustrado com a localização do regex, e agora recebo um pouco disso graças a um amigo que me chamou de lado para explicar algumas dessas coisas em termos mais simples do que os encontrados nos guias on-line.

Essa solução basicamente procura por uma (s) imagem (s) específica (s) com um prefixo inicial de "prefixone" ou "prefixtwo", além de verificar se é uma imagem de um determinado tipo (jpg, jpeg, png) e corresponde a qualquer um dos seguintes formatos .

Dependendo da lesma que você passou do Wordpress (onde eu estava usando isso), ela corresponderia à expressão regular. Aqui está um exemplo de listagem:

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

Todos esses arquivos que podem ter sido potencialmente retornados na lista de arquivos da nossa função opendir (), qualquer um desses arquivos poderia corresponder se a lesma corresponder. Independentemente da ordem das informações de marcação no nome do arquivo.

Espero que isso ajude outro usuário lutando com regex. É uma dor de cabeça, mas depois que você entende algumas coisas fundamentais, o resto começa a se encaixar rapidamente para começar a construir o seu próprio.

Código:

<?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;
        }
    }
}
?>

Na verdade, eu não precisava de recursividade para isso, mas existem muitos exemplos recursivos on-line e essa era realmente a menor das minhas preocupações. O isolamento de conteúdo por padrão foi o núcleo dessa tarefa, portanto o código acima foi suficiente.

Nota:

Para aqueles que apontaram os "comentários aceitos" ontem, não fazia ideia de que estava sentindo falta disso e peço desculpas. Eu estava tendo um dia ruim. Desculpe se eu pareci falar com alguém sobre os comentários. Esta é uma ótima comunidade e também estou feliz em retribuir onde puder.

questionAnswers(1)

yourAnswerToTheQuestion