Ver Mensaje Individual
  #3 (permalink)  
Antiguo 27/07/2015, 15:19
Avatar de Fernand0
Fernand0
 
Fecha de Ingreso: septiembre-2005
Ubicación: Buenos Aires
Mensajes: 610
Antigüedad: 19 años, 1 mes
Puntos: 19
Respuesta: preg_replace_callback bug?

A ver si esto ayuda...

Código PHP:
Ver original
  1. $subject = '$color.name';
  2.    
  3.     $callback = function($matches) use ($subject) {
  4.    
  5.         $callback2 = function($groups) use ($matches) {
  6.            
  7.             $match = $matches[$groups[1]];  // $groups[1] devuelve el '1' de '$1'
  8.                                             // por tanto seria $matches[1]
  9.                                             // equivalente a 'name' (sin el punto)
  10.            
  11.             return str_replace( // duevuelvo '["name"]' para $replaced
  12.                 $groups[0], // esto tomaria cada uno de los $1 $2 encontrados..
  13.                 $match, // seria 'name'
  14.                 '["$1"]' // se reemplaza '$1' por 'name'
  15.             );
  16.            
  17.         };
  18.        
  19.         $replaced = preg_replace_callback( // consigo '["name"]'
  20.             '@\$([0-9]{1,2})@i', // busca los $1 $2 $3 etc.. que uno ponga
  21.             $callback2, // llama a $callback2
  22.             '["$1"]' // $1 deberia ser remplazado por 'name'
  23.         );
  24.        
  25.         return str_replace( // finalmente se reemplaza todo
  26.             $matches[0],  // esto es ".name"
  27.             $replaced, // esto es '["name"]'
  28.             $subject // esto es '$color.name'
  29.         );
  30.        
  31.     };
  32.    
  33.     $subject = preg_replace_callback(
  34.         '@\.([a-z_]+)@i', // busca los ".algo" en este caso ".name"
  35.         $callback, // llama a $callback
  36.         $subject // string = '$color.name'
  37.     );
  38.    
  39.     echo "<br>handed replaced: " . $subject;

output
Código HTML:
Ver original
  1. handed replaced: $color$color["["name"]"]