Вариант # 1 : PHP 5.3+ (анонимные функции)
$count=0;
echo preg_replace_callback('/\bnum\b/',
function($v){global $count; return ++$count;},
$test_str) ;
Вариант № 2 : регулярное выражение eval
$count=0;
echo preg_replace('/\bnum\b/e', '++$count', $test_str);
Привет
БВУ