В таком случае ябы посоветовал тебе юзать preg_replace_callback (mixed pattern, mixed callback, mixed subject [, int limit);
Фишка вот в чем : вместо обыкновенного replac-a preg_replace_callback заменяетсвой стринг на то что возвращает функция [имя которой] ты пишеш во втором аргументе.
Получается следующие :

PHP код:
<?
$max = 5;
$counter = 0;
$replaces = array ("strochka" => "string","nice" => "stupid");
$in = "Here goes my strochka ... Very nice strochka. I want to replace my strochka. It will be a nicer strochka";
// Вызываем preg_replace_callback
$out = preg_replace_callback ("(strochka|nice)", "callback_function", $in);
/*
preg_replace_callback в свою очередь вызывает функцию callback_function которую ты заранее определил.
*/
function callback_function ($matches) {
global $counter, $max, $replaces, $in;
if ($counter > $max) {
// То что должно случится когда количество совпадений перевалило за макксимум. Например : $exit = true; и (!!!) ,
// всю твою строку приравниваешь ошибке.
$in = "Eror !?!";
$error = true;
}
$counter++;
// На худой конец
if ($error) return "";
// Для нормальной расклаки
return ($replaces[$matches[0]]);
}
echo $out;
?>