Что касается php.net документация с использованием модификатора e
не рекомендуется,
Эта функция устарела с версии PHP 5.5.0. Полагаться на эту функцию крайне не рекомендуется.
поэтому нам лучше достичь нашей цели без использования этого модификатора.
1012 *
*
Вот решение, основанное на современных инструментах PHP:
$source = 'a_b__c___d____e';
echo preg_replace_callback( "%(_{2,})%i", function($matches) {return str_repeat( "-", strlen($matches[1]) ); }, $source );
/* in callback function matches[0] is whole matched pattern, groups go like this matches[1],matches[2]... */
Даже если e
все еще доступен в нашей среде PHP, обычно лучше использовать функцию обратного вызова - благодаря обратному вызову мы избегаем довольно небезопасного сочетания функции addslashes()
и вычисления строки, поскольку запуск preg_replace с указанным модификатором включает оба действия за один раз.
A preg_replace_callback
доступен с версии 4.0.5, но function($matches) {}
- это анонимная функция, которая на самом деле является гораздо более новой функцией языка, для запуска этого кода вам нужен PHP в версии 5.3.0 или новее .