PHP7 - модификатор / e больше не поддерживается, используйте вместо него preg_replace_callback

Может ли кто-нибудь помочь мне с этой ошибкой, которую я получаю?

Warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead

Мой исходный код:

$match[1] = preg_replace('/(?<=^|[\x09\x20\x2D])./e', 'strtoupper("\0")', strtolower(trim($match[1])));

Я попробовал вот так:

$match[1] = preg_replace_callback('/(?<=^|[\x09\x20\x2D])./e',
                    function ($matches) {
                        foreach ($matches as $match) {
                            return strtoupper($match);
                        }
                    },
                    strtolower(trim($match[1])));

Но я все еще получаю ту же ошибку:

Warning: preg_replace_callback(): The /e modifier is no longer supported, use preg_replace_callback instead

Ваш модификатор e больше не имеет смысла в вашем коде preg_replace_callback(). Убери это. Затем return в foreach остановит цикл на первой итерации.

Syscall 18.03.2018 14:07
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
4
1
24 828
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Сообщение об ошибке предлагает вам удалить модификатор e, который вы включили в свой новый код.

/ (?<=^|[\x09\x20\x2D]). / e
^ ^------Pattern-------^ ^ ^ ---- Modifiers
|                        |
 -------Delimiters-------

Вам нужно удалить модификатор, поэтому preg_replace_callback('/(?<=^|[\x09\x20\x2D])./e', ...) должен быть preg_replace_callback('/(?<=^|[\x09\x20\x2D])./' , ...).

Кстати, использование цикла foreach в вашем новом коде не приносит пользы. Соответствие всегда будет во втором элементе массива. Вот пример без использования цикла:

$inputString = 'foobazbar';

$result = preg_replace_callback('/^foo(.*)bar$/', function ($matches) {
     // $matches[0]: "foobazbar" 
     // $matches[1]: "baz" 
     return "foo" . strtoupper($matches[1]) . "bar";
}, $inputString);

// "fooBAZbar"
var_dump($result);

«Соответствие всегда будет во втором элементе массива». - это элемент массива первый (и единственный) в случае OP, поскольку они не используют группы захвата.

salathe 18.03.2018 14:34

@salathe, я не понимаю. В ОП вижу пару ()? Ни один из кодов, представленных в OP, не имел бы смысла без группы захвата (которая полностью присутствует).

HPierce 18.03.2018 14:43

(?<=...) - это утверждение назад, а не группа захвата.

salathe 18.03.2018 19:44

Другие вопросы по теме