Если ваша цель - получить отдельные части, а также совпадающие совпадения для текущего и следующего слова, альтернативным решением может быть использование выражения.
Вы можете зафиксировать перекрывающиеся совпадения в группе, используя положительный прогноз, а также захватить отдельные «слова», сопоставив 1+ раз непробельный символ и используя группу сброса ветви (?|
$string = "Hello World Hey";
$res = preg_match_all("/(?|(?:^|\h)(?=(\S+ \S+))|(\S+))/", $string, $matches);
print_r($matches[1]);
Результат
Array
(
[0] => Hello World
[1] => Hello
[2] => World Hey
[3] => World
[4] => Hey
)
Демонстрационная модель | Php demo
Если вам нужны текущее и 2 следующих слова, вы можете использовать группу и квантификатор {2}
Php демо