所以我使用目录迭代器来获取所有这样的php文件:
$file_list = new RegexIterator($iterator_instance, '/^.+\.php$/');
现在$file_list
包含所有扩展名为.php
的文件。但是我希望能够获得所有php文件,但跳过文件夹名称查看,但我不知道如何编写这样的正则表达式,因为我不擅长它。
我只想获取所有.php
个文件,但不是来自名为视图的文件夹。
更新
$dir_iterator = new RecursiveDirectoryIterator($path);
$iterator = new RecursiveIteratorIterator($dir_iterator);
$file_list = new RegexIterator($iterator, '/^.+\.php$/');
// foreach stuff now
在这里,我只想从返回的文件/文件夹名称中删除一个名为 views 的文件夹,如果上面的正则表达式可以修改以便考虑到这一点,我很乐意。
答案 0 :(得分: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);
答案 1 :(得分: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