int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags [, int $offset ]]] )

matches を指定した場合、検索結果が代入されます。 $matches[0] にはパターン全体にマッチしたテキストが代入され、 $matches[1] には 1 番目ののキャプチャ用サブパターンにマッチした 文字列が代入され、といったようになります。

つまり↑の方法では最終ループで一致したファイル名しか返さない。
>>955が正しい。

while内で$i++;して、$ret[$i] = $flist。そんでreturn $ret;とか。