Проблема в том, что сначало должно выполнится первоя часть: ((?<=\||\d{11}|\})(8496|8916|7891)(?=\d{7}))
Но почему то выполняется вторая: ((?<=\||\d{10}|\})(8496|8916|7891)(?=\d{7}))
Какая замена? в чем? где пример текста, на который вы его запускали? где названия языка программирования? или вы наивно полагаете, что все языки программирования одинаково реализуют regexp? Лучше, если это будет кусок кода, или jsfiddle ( если речь о js)
php, замена через функцию preg_replace, пример 8496121212789161212122
сперва идет замена 10 символов в начале, а должно 11 сначало брать.
делает: 8496121212|789161212122
должно делать: 84961212127|89161212122