Ваше регулярное выражение должно следовать синтаксису Perl, то есть оно должно начинаться и заканчиваться одним и тем же символом (за некоторыми исключениями). Кроме того, обратная ссылка должна начинаться с двойной косой черты, чтобы обойти двойное экранирование PHP. Это должно работать (с быстрым тестом):
$str = "asdfasdf |123123 asdf iakds |302 asdf |11";
$str = preg_replace("/([|]\d*)/", "\\1;", $str);
echo $str; // prints "asdfasdf |123123; asdf iakds |302; asdf |11;"