Ver Mensaje Individual
  #10 (permalink)  
Antiguo 16/06/2009, 10:31
Avatar de metacortex
metacortex
Viejo demente
 
Fecha de Ingreso: junio-2004
Ubicación: Caracas - Venezuela
Mensajes: 9.027
Antigüedad: 19 años, 11 meses
Puntos: 832
Respuesta: Problemas con reemplazos en una expresión regular

Lo logré!!! ... Lo logré!!! . Home run!!! Gooollll!!!

Me costó medio cojón pero al fin salió. En serio gente, qué difícil se me hizo entender cómo funcionaba. Miré docenas de ejemplos, me grabé el manual de memoria y aún no lo lograba. Esta madrugada me levanté insistiendo de nuevo y a esta hora es que vengo acertando.

Dejo el código aquí para la posteridad :

La función de los reemplazos quedó exactamente igual que al principio.

Código php:
Ver original
  1. function sin_acentos( $texto ) {
  2.   $trad = array(
  3.     'Á'  =>  'A1',
  4.     'É'  =>  'E1',
  5.     'Í'  =>  'I1',
  6.     'Ó'  =>  'O1',
  7.     'Ú'  =>  'U1',
  8.     'á'  =>  'a1',
  9.     'é'  =>  'e1',
  10.     'í'  =>  'i1',
  11.     'ó'  =>  'o1',
  12.     'ú'  =>  'u1',
  13.     'Ñ'  =>  'N1',
  14.     'ñ'  =>  'n1'
  15.   );
  16. return(strtr($texto,$trad));
  17. }

Creé una variable para la expresión regular, aunque creo que también funcionaría con datos estáticos:

Código php:
Ver original
  1. $reg_reemp = '|\[c=(.*?)\]|';

La función para reemplazar el atajo por la etiqueta HTML. Aquí metí toda la etiqueta de cabo a rabo y le apliqué la función sin_acentos() de una vez a la zona que me interesaba sustituir. Es decir, lo que aprendí es que el argumento del preg_replace_callback debe estar limpio, y todo lo que se vaya a ejecutar se ejecuta afuera:

Código php:
Ver original
  1. function carac_reemplazo($match) {
  2.     return '<span class="capitular letra-' . sin_acentos( $match[1] ) . '">' . $match[1] . '</span>';
  3. }

Finalmente el preg_replace_callback:

Código php:
Ver original
  1. $contenido = preg_replace_callback($reg_reemp ,'carac_reemplazo' , $contenido);

Bueno así ha terminado este lío. Gracias de nuevo pateketrueke por proporcionarme la orientación básica sin llegar a darme la papita pelada .