Я пытаюсь выяснить, как изменить это с preg_replace на preg_replace_callback. После прочтения руководства и просмотра нескольких примеров все еще нет никакого эффекта - только ошибки.
Кто-нибудь может мне подсказать?
$error = preg_replace('#^([A-Z_]+)$#e', "(!empty(\$user->lang['\\1'])) ? \$user->lang['\\1'] : '\\1'", $error);
Это тоже похоже на проблему XY. Какая задача стоит за этим?
Это часть скрипта регистрации вместе с обработкой ошибок на нескольких языках. Нет, это версия preg_replace.
В любом случае кажется несколько избыточным в этом коде. Все, что делает регулярное выражение, - это утверждает, что строка является буквенно-цифровой, и ищет ее в массиве или оставляет ее, если она не определена. На самом деле нет необходимости вводить обратный вызов.
@JackGiffin Потому что это никому не помогает ответить на сотый вариант того же вопроса. Это просто размывает результаты поиска в Google.
@JackGiffin Верхний ответ на обманутый вопрос дает отличное объяснение того, как работает такое преобразование, включая то, что можно и чего нельзя. Так что это является - идеально подходящий ответ на вопрос «Как сделать». Просто нет смысла все переписывать.






это уже должна быть версия обратного вызова? Эта строка как второй параметр должна присутствовать в обратном вызове?