Ver Mensaje Individual
  #10 (permalink)  
Antiguo 27/07/2015, 20:11
Avatar de pateketrueke
pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: preg_replace_callback bug?

Pues no, nada raro, sencillamente hacías cosas de más, trucos chinos y no se que tantos hacks para intentar darle la vuelta a algo muy simple.

Básicamente estabas usando código sin razón ni beneficio alguno:
Código PHP:
Ver original
  1. <?php
  2.  
  3. $subject = '$color.name';
  4.  
  5. // use($subject) es innecesario
  6.  
  7. $callback = function($matches) {
  8.  
  9.   /* todo esto es innecesario...
  10.  
  11.     $callback2 = function($groups) use ($matches) {
  12.  
  13.         $match = $matches[$groups[1]];  // $groups[1] devuelve el '1' de '$1'
  14.                                         // por tanto seria $matches[1]
  15.                                         // equivalente a 'name' (sin el punto)
  16.  
  17.         return str_replace( // duevuelvo '["name"]' para $replaced
  18.             $groups[0], // esto tomaria cada uno de los $1 $2 encontrados..
  19.             $match, // seria 'name'
  20.             '["$1"]' // se reemplaza '$1' por 'name'
  21.         );
  22.  
  23.     };
  24.  
  25.     $replaced = preg_replace_callback( // consigo '["name"]'
  26.         '@\$([0-9]{1,2})@i', // busca los $1 $2 $3 etc.. que uno ponga
  27.         $callback2, // llama a $callback2
  28.         '["$1"]' // $1 deberia ser remplazado por 'name'
  29.     );*/
  30.  
  31.     // esto esta mal, tu no debes hacer ningun reemplazo,
  32.     // debes dejar que preg_replace_callback haga su trabajo...
  33.  
  34.   /*
  35.     return str_replace( // finalmente se reemplaza todo
  36.         $matches[0],  // esto es ".name"
  37.         $replaced, // esto es '["name"]'
  38.         $subject // esto es '$color.name'
  39.     );
  40.     */
  41.  
  42.   // $matches[1] es "name"
  43.   return '["' . $matches[1] . '"]';
  44. };
  45.  
  46.     '@\.([a-z_]+)@i', // busca los ".algo" en este caso ".name"
  47.     $callback, // llama a $callback
  48.     $subject // string = '$color.name'
  49. );
  50.  
  51. echo "<br>handed replaced: " . $subject;

Lee bien tu código y verás que siempre hiciste mal todo.

Y todo eso ocurre por no leer el manual.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.