如何使用preg_match()和yield(PHP5.5生成器语法)迭代正则表达式匹配?

如何使用preg_match()和yield(PHP5.5生成器语法)迭代正则表达式匹配?,php,regex,foreach,iterator,Php,Regex,Foreach,Iterator,我想遍历正则表达式模式的匹配项 我不想使用preg\u match\u all(),因为它会生成一个临时数组,其中包含我不需要的所有匹配项。我也不喜欢通过构建一个完整的迭代器类来扩充内容 幸运的是,PHP 5.5带来了很好的语法,我认为结合preg_match()应该可以解决这个问题?一个简单的示例迭代器,它循环遍历字符串的所有单词: function wordIterator($str) { $offset = 0; while ( preg_match('/\w+/', $s

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

我不想使用
preg\u match\u all()
,因为它会生成一个临时数组,其中包含我不需要的所有匹配项。我也不喜欢通过构建一个完整的迭代器类来扩充内容


幸运的是,PHP 5.5带来了很好的语法,我认为结合
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>';
}
函数wordIterator($str)
{
$offset=0;
while(preg_match('/\w+/',$str,$m,preg_OFFSET_CAPTURE,$OFFSET)){
$offset=$m[0][1]+strlen($m[0][0]);
收益率:百万[0][0];
}
}
foreach(wordIterator('Lorem ipsum dolor')作为$word){
回显$word.“
”; }