首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP递归正则表达式过滤器迭代器迭代器

PHP递归正则表达式过滤器迭代器迭代器
EN

Stack Overflow用户
提问于 2018-02-02 10:25:46
回答 2查看 276关注 0票数 3

我只是试图递归地遍历目录中的所有文件,只过滤那些与模式匹配的文件。

结果是RegexIterator提供了正则表达式匹配对象,但我想要的是SplInfo对象。

下面是我得到的信息:

代码语言:javascript
复制
class RegexFilterIterator extends RecursiveFilterIterator {

    private $pattern;

    public function __construct(RecursiveIterator $iterator, $pattern) {
        parent::__construct($iterator);
        $this->pattern = $pattern;
    }


    public function accept() {
        return preg_match($this->pattern, $this->current()->getFilename()) > 0;
    }
}

$dir = new RecursiveDirectoryIterator($argv[1]);
$regex = new RegexFilterIterator($dir, '/\.php5?\z/i');
$it = new RecursiveIteratorIterator($regex);



foreach($it as $foo) {
   echo $foo->getPathname().PHP_EOL;
}

但这似乎不是递归的。

我相信这是因为\RegexFilterIterator::accept实际上也收到了目录,我拒绝了它们,因为它们不是以.php结尾的。

很容易解决,对吧?只需稍微修改一下:

代码语言:javascript
复制
public function accept() {
    return $this->current()->isDir() || preg_match($this->pattern, $this->current()->getFilename()) > 0;
}

现在它崩溃了:

PHP致命错误:未捕获ArgumentCountError:函数RegexFilterIterator::__construct()的参数太少,已传递%1,但在bleep中应恰好为%2

这对我来说没有任何意义。为什么试图自己构造更多的RegexFilterIterator实例,以及它是如何搞砸的?

PHP致命错误:未捕获TypeError:传递给RegexFilterIterator::__construct()的参数1必须实现给定的RecursiveIteratorIterator实例的接口RecursiveIterator

所以..。我不知道您应该如何使用这些类。

我如何递归一个目录中的所有文件,并用一个简单的正则表达式过滤它们,返回一个生成SplInfo对象的生成器/迭代器?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48574831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档