Preg_replace avec des remplacements de tableaux

$string = ":abc and :def have apples.";
$replacements = array('Mary', 'Jane');

devrait devenir:

Mary and Jane have apples.

Droit maintenant, je fais comme ceci:

preg_match_all('/:(\w+)/', $string, $matches);

foreach($matches[0] as $index => $match)
   $string = str_replace($match, $replacements[$index], $string);

Puis-je faire cela en un seul passage, en utilisant quelque chose comme preg_replace?

source d'informationauteur Alex