Почему неправильно регулярное выражение в PHP?
флаг u добавить нужноpreg_replace('/(@[a-zA-Zа-яА-Я0-9]+?)#(\d+)/u', '<a href="/user/$2" class="user-tag">$1</a>', $text);
вместо [a-zA-Zа-яА-Я0-9], можно так \w
preg_replace('/(@.+?)#(\d+)/', '<a href="/user/$2" class="user-tag">$1</a>', $text);
Зачем вообще эта заморочка с кириллицей? Если завтра у вас там попадется иероглифы будут, или Schrödinger однажды зарегистрируется, то придется переделывать регулярку.
https://ideone.com/imCdS0