Вы не можете использовать внешние переменные таким образом. $ 1 относится к переменной в регулярному выражению, а не к внешней. Это просто значение первых соответствующих скобок в регулярном выражении.
Чтобы использовать внешнюю переменную, а также любое другое выражение, вам нужно использовать функцию preg_replace_callback ().
Что-то вроде этого ( Я не запускал этот код, может содержать ошибки):
preg_replace_callback('/\{\{:(.*?):\}\}/si', function ($matches) { return $GLOBALS[$matches[1]]; }, $subject);
Обратите внимание, я использую массив $ GLOBALS, предполагая, что ваши переменные являются глобальными. Если это не так, вам нужно использовать другой способ для достижения переменной в правильной области.