Почему регулярное выражение не находит второе совпадение?
$str = '1.9.2017'; // или 10.9.2017 или 1.10.2017
$str = preg_replace('/(^|\.)(\d\.)/', '${1}0$2', $str);
var_dump($str); // 01.9.2017, а ожидалось, что будет 01.09.2017
Алексей Уколов, значит надо давать несколько вариантов, а не один, чтобы потом не писать "не работает".
Штатная гадалка в отпуске, откуда всем знать, что Вам надо на самом деле. ещё вариант