如何使用preg_match()和yield(PHP 5.5生成器语法)迭代regex匹配



我想遍历正则表达式模式的匹配项。

我不想使用preg_match_all(),因为它会生成一个包含我不需要的所有匹配项的临时数组。我也不喜欢通过构建一个完整的迭代器类来夸大事情。

幸运的是,PHP 5.5带来了不错的yield语法,我认为结合preg_match()应该可以解决这个问题?

一个简单的迭代器示例,它循环遍历字符串的所有单词:

function wordIterator($str)
{
    $offset = 0;
    while ( preg_match('/w+/', $str, $m, PREG_OFFSET_CAPTURE, $offset)) {
        $offset = $m[0][1] + strlen($m[0][0]);
        yield $m[0][0];
    }
}
foreach( wordIterator('Lorem ipsum dolor.') as $word) {
    echo $word.'<br>';
}

最新更新