como refiriéndose a php.net documenation usando modificador de e
se desaconseja,
Esta característica tiene estado DEPURADO a partir de PHP 5.5.0. Confiar en esta característica es altamente desaconsejado.
así que será mejor que logremos nuestro objetivo sin utilizar este modificador.
Aquí está basado solución en un máximo de herramientas fecha de 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]... */
Incluso con e
todavía disponibles en nuestro entorno PHP, por lo general es mejor utilizar la función de devolución de llamada - agradecimiento de regresar la llamada evitamos combinación bastante insegura de la función addslashes()
y la evaluación de cadenas, ya que la ejecución de preg_replace con el modificador mencionado involucra ambas acciones a la vez.
Un preg_replace_callback
ha estado disponible desde la versión 4.0.5, pero function($matches) {}
es una función anónima que en realidad es mucho más nueva característica del lenguaje, para ejecutar este código u necesidad de PHP en la versión 5.3.0 o posterior .