0

したがって、ディレクトリ イテレータを使用して、次のようなすべての php ファイルを取得しています。

$file_list = new RegexIterator($iterator_instance, '/^.+\.php$/');

拡張子$file_listを持つすべてのファイルが含まれるようになりました。.phpただし、すべてのphpファイルを取得できるようにしたいのですが、名前ビューでフォルダーをスキップしますが、そのような正規表現を書く方法が得意ではないのでわかりません。

views.phpという名前のフォルダーからではなく、すべてのファイルを取得したいだけです。


アップデート:

$dir_iterator = new RecursiveDirectoryIterator($path);
$iterator = new RecursiveIteratorIterator($dir_iterator);
$file_list = new RegexIterator($iterator, '/^.+\.php$/');
// foreach stuff now

ここでは、返されたファイル/フォルダー名から、viewsという名前のフォルダーをスキップする必要があるだけであり、それを考慮して上記の正規表現を変更できることを望みます。

4

2 に答える 2

4

CallbackFilterIterator(PHP 5.4)を使用できます

// Assuming $file_list is based on a FilesystemIterator
$iter = new CallbackFilterIterator($file_list, function($current) {
    return strpos('/views/', $current->getReaPath()) === false;
});

PHP 5.3 の場合:

class DirectoryFilter extends FilterIterator {
    public function accept() {
        $current = $this->getInnerIterator()->current();
        return strpos('/views/', $current->getReaPath()) === false;
    }
}
$iter = new DirectoryFilter($file_list);
于 2012-09-24T06:04:58.170 に答える
3

次の正規表現を使用できます。

'%^(?!.*[\\\\/]views?[\\\\/]).+\.php$%'

説明:

^         # Start of string
(?!       # Assert that it's impossible to match the following here:
 .*       #  any number of characters
 [\\\\/]  #  a path delimiter (backslash or forward slash)
 views?   #  followed by view or views
 [\\\\/]  #  followed by a path delimiter
)         # End of lookahead assertion
.+        # Match one or more characters
\.php     # Match .php
$         # End of string
于 2012-09-24T06:13:46.523 に答える