Попробуйте использовать следующий шаблон:
\b[0-9](?: [0-9]){9}\b
Ваш обновленный код:
$str = "hi hello 1 2 3 4 5 6 7 8 9 0 ok";
preg_match_all('/\b[0-9](?: [0-9]){9}\b/', $str, $matches, PREG_OFFSET_CAPTURE);
print_r($matches[0][0]);
Array ( [0] => 1 2 3 4 5 6 7 8 9 0 [1] => 9 )
Причина размещения границ слова (\b
) по обеим сторонам шаблона:чтобы предотвратить ложное совпадение по линии следующего
10 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 012
То есть нам нужно убедиться, что первая и последняя цифры на самом деле представляют собой отдельные цифры, а не части больших чисел.