Согласно результатам моего теста, я бы хотел проголосовать за обычный_экспресс, предоставленный karim79. (У меня недостаточно репутации, чтобы проголосовать сейчас!)
Решение от zombat использует слишком много вызовов функций, я даже упрощаю коды. Я использую PHP 5.4 для запуска обоих решений 100 000 раз, и вот результат:
$str = 'Hello abc, have a nice day abc! abc!';
$pos = strpos($str, 'abc');
$str = substr_replace($str, '123', $pos, 3);
==> 1,85 с
$str = 'Hello abc, have a nice day abc! abc!';
$str = preg_replace('/abc/', '123', $str, 1);
==> 1,35 с
Как видите. Производительность preg_replace не так плоха, как думают многие. Поэтому я бы предложил классное решение, если ваш регулярный экспресс не сложен.