$str = "Hello 1234567 Stack 56789 Overflow 12345";
$str = preg_replace('/([0-9] )/', ',', $str);
Я хочу это "Здравствуйте, 1234567, стек 56789, переполнение 12345,..."






Использовать
preg_replace('/\d(?=\s)/', '$0,', $str)
Смотрите доказательство.
Объяснение выражения
--------------------------------------------------------------------------------
\d digits (0-9)
--------------------------------------------------------------------------------
(?= look ahead to see if there is:
--------------------------------------------------------------------------------
\s whitespace (\n, \r, \t, \f, and " ")
--------------------------------------------------------------------------------
) end of look-ahead
Я бы использовал логику регулярных выражений, которая явно нацелена на пробелы с цифрами слева и буквами справа:
$input = "Hello 1234567 Stack 56789 Overflow 12345";
$output = preg_replace('/(?<=\d) (?=\D)/', ', ', $input);
echo $input . "\n" . $output;
Это печатает:
Hello 1234567 Stack 56789 Overflow 12345
Hello 1234567, Stack 56789, Overflow 12345
Ваш ожидаемый результат неясен.