3 millones en foros del web

Registrarte Políticas Wiki 120segs Ayuda Iniciar sesion

Avisos

Retroceder   Foros del Web > Programación para sitios web > PHP
Respuesta
 
Herramientas Desplegado
Antiguo 15-jun-2009, 08:06   #1 (permalink)
Moderador
metacortex (Reg: junio-2004)
 
7.692 Mensajes
Ubicación: Caracas - Venezuela
metacortex está desconectado
Problemas con reemplazos en una expresión regular

Tengo un problema con un reemplazo de acentos. Primero armé una pequeña función para aplicar la sustitución que necesito:

Código php:
Ver originalCopiar
  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. }

Luego hice esta otra función para reemplazar caracteres con un atajo pero no me funciona:

Código php:
Ver originalCopiar
  1. function contenido($contenido) {
  2.   $contenido = preg_replace( '|\[c=(.*?)\]|', '<span class="letra-'.sin_acentos('$1').'">$1</span>' , $contenido );
  3. }

El resultado es que anula todo el preg_replace y me devuelve el atajo tal como está escrito, por ejemplo "[c=A]", cuando lo que debería aparecer es algo como esto (suponiendo que esté la letra "Ñ"):

Código html:
Ver originalCopiar
  1. <span class="letra-N1">Ñ</span>

¿Cómo le hago?.
__________________
WP Smart Image II plugin
  Responder Citando
Antiguo 15-jun-2009, 08:14   #2 (permalink)
Colaborador
pateketrueke (Reg: abril-2008)
 
10.296 Mensajes
Ubicación: Mexihco-Tenochtitlan
Enviar un mensaje por MSN a pateketrueke Enviar un mensaje por Skype™ a pateketrueke pateketrueke está desconectado
Respuesta: Problemas con reemplazos en una expresión regular

mmm... la funcion a ejecutar con preg_replace() debe ser evaluada, osea... literal, pero debes usar el modificador de evaluación (e)

http://www.forosdelweb.com/f18/aport...ml#post2670913


revisa el manual, o bien, usa preg_replace_callback(), para utilizar un funcion mas cómodamente...

Código PHP:
function bar($match)
{
  
var_dump($match);
}

$foo preg_replace('/.*/e''foo("\\0")'$foo);
$foo preg_replace_callback('/.*/''foo'$foo); 
__________________
-Mi framework Amigable tiene una nueva versión-
...soy un scriptales!!!
  Responder Citando
Antiguo 15-jun-2009, 08:32   #3 (permalink)
Colaborador
abimaelrc (Reg: mayo-2009)
 
9.527 Mensajes
abimaelrc está desconectado
Respuesta: Problemas con reemplazos en una expresión regular

Yo trate lo que tu escribiste y me devuelve

[c=Á] = <span class="letra-Á">Á</span>
[c=É] = <span class="letra-É">É</span>
[c=Ñ] = <span class="letra-Ñ">Ñ</span>


Así sucesivamente. ¿Como tu deseas que te devuelva la función?
  Responder Citando
Antiguo 15-jun-2009, 08:40   #4 (permalink)
Colaborador
pateketrueke (Reg: abril-2008)
 
10.296 Mensajes
Ubicación: Mexihco-Tenochtitlan
Enviar un mensaje por MSN a pateketrueke Enviar un mensaje por Skype™ a pateketrueke pateketrueke está desconectado
Respuesta: Problemas con reemplazos en una expresión regular

Cita:
Iniciado por abimaelrc Ver Mensaje
[...] ¿Como tu deseas que te devuelva la función?
Cita:
Iniciado por metacortex Ver Mensaje
[...]
Código html:
Ver originalCopiar
  1. <span class="letra-N1">Ñ</span>

[...]

__________________
-Mi framework Amigable tiene una nueva versión-
...soy un scriptales!!!
  Responder Citando
Antiguo 15-jun-2009, 09:02   #5 (permalink)
Moderador
metacortex (Reg: junio-2004)
 
7.692 Mensajes
Ubicación: Caracas - Venezuela
metacortex está desconectado
Respuesta: Problemas con reemplazos en una expresión regular

Gracias por las respuestas. Estuve probando con preg_replace_callback y el error me pide un "argumento 2":

Código HTML:
Warning: preg_replace_callback() [function.preg-replace-callback]: Requires argument 2, '<span class="letra-$1">$1</span>', to be a valid callback in /var/www/meta/functions.php on line 58
He probado con varias opciones en el 2do argumento y aún nada.

Cita:
Iniciado por pateketrueke
revisa el manual
No tienes idea desde hace cuánto lo tengo atornillado en la frente .
__________________
WP Smart Image II plugin
  Responder Citando
Antiguo 15-jun-2009, 09:20   #6 (permalink)
Colaborador
pateketrueke (Reg: abril-2008)
 
10.296 Mensajes
Ubicación: Mexihco-Tenochtitlan
Enviar un mensaje por MSN a pateketrueke Enviar un mensaje por Skype™ a pateketrueke pateketrueke está desconectado
Respuesta: Problemas con reemplazos en una expresión regular

no quiero ser ofensivo, tu lo sabes...

pero el manual es muy claro
Cita:
Iniciado por http://php.net/preg_replace_callback
mixed preg_replace_callback ( mixed $pattern , callback $callback , mixed $subject [, int $limit= -1 [, int &$count ]] )
incluso el mensaje de error es aun mas aclarador, el segundo argumento debe ser un callback valido (mira el ejemplo anterior que coloque)
__________________
-Mi framework Amigable tiene una nueva versión-
...soy un scriptales!!!
  Responder Citando
Antiguo 15-jun-2009, 09:31   #7 (permalink)
Moderador
metacortex (Reg: junio-2004)
 
7.692 Mensajes
Ubicación: Caracas - Venezuela
metacortex está desconectado
Respuesta: Problemas con reemplazos en una expresión regular

A ver. El ejemplo que pusiste:

Código php:
Ver originalCopiar
  1. preg_replace_callback('/.*/', 'bar', $foo);

¿No será así, teniendo en cuenta la función que escribiste más arriba?:

Código php:
Ver originalCopiar
  1. preg_replace_callback('/.*/', 'bar', $foo);

Eso fue lo mismo que hice, pero no sé cómo encajar el "$1" en ese 2do argumento y aplicarle la función de los acentos. Bueno, ya saldrá. Gracias por todo.
__________________
WP Smart Image II plugin
  Responder Citando
Antiguo 15-jun-2009, 09:37   #8 (permalink)
Colaborador
pateketrueke (Reg: abril-2008)
 
10.296 Mensajes
Ubicación: Mexihco-Tenochtitlan
Enviar un mensaje por MSN a pateketrueke Enviar un mensaje por Skype™ a pateketrueke pateketrueke está desconectado
Respuesta: Problemas con reemplazos en una expresión regular

jeje, tus dos código son idénticos... mira este ejemplo completo

Código PHP:
function reemplazar_callback($match)
{
  return 
sin_acentos($match[1]); // (.*?) = $1 = \\1
}

function 
contenido($contenido)
{
  return 
preg_replace_callback'/\[c=(.*?)\]/iU''reemplazar_callback'$contenido);

efectivamente el callback te permite procesar sin necesidad de comodines $N
__________________
-Mi framework Amigable tiene una nueva versión-
...soy un scriptales!!!
  Responder Citando
Antiguo 15-jun-2009, 10:17   #9 (permalink)
Moderador
metacortex (Reg: junio-2004)
 
7.692 Mensajes
Ubicación: Caracas - Venezuela
metacortex está desconectado
Respuesta: Problemas con reemplazos en una expresión regular

Ah carajo! Imagínate, cuándo se me iba a ocurrir esa vaina jeje. Estaba en las nebulosas.

Entonces hay que crear una tercera función que prepare a la de los acentos para introducirla en el argumento. Hermano, ni se me había pasado por la cabeza. Gracias mil por el empujón.

Mierda y lo peor es que estuvo frente a las narices todo el tiempo. Lo que no pude descifrar fue lo de esa nueva función.

Cita:
Iniciado por pateketrueke
jeje, tus dos código son idénticos...
Sí, el primero era con "foo". Vainas del copypaste =P
__________________
WP Smart Image II plugin
  Responder Citando
Antiguo 16-jun-2009, 10:31   #10 (permalink)
Moderador
metacortex (Reg: junio-2004)
 
7.692 Mensajes
Ubicación: Caracas - Venezuela
metacortex está desconectado
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 originalCopiar
  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 originalCopiar
  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 originalCopiar
  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 originalCopiar
  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 .
__________________
WP Smart Image II plugin
  Responder Citando
Respuesta
SíEste tema le ha gustado a 1 personas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.

Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code está Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado
Trackbacks está Desactivado
Pingbacks está Desactivado
Refbacks está Desactivado



La zona horaria es GMT -6. Ahora son las 00:45.
Políticas de Uso de Foros del Web


Message Board Statistics

SEO by vBSEO 3.3.2

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108