Foros del Web » Programando para Internet » PHP »

Duda con referencias en el reemplazo de preg_replace.

Estas en el tema de Duda con referencias en el reemplazo de preg_replace. en el foro de PHP en Foros del Web. Hola, buenas, alguien puede explicarme las referencias en la cadena a reemplazar en preg_replace, por que por mas que leo el manual de php no ...
  #1 (permalink)  
Antiguo 14/02/2012, 19:35
 
Fecha de Ingreso: febrero-2012
Mensajes: 10
Antigüedad: 12 años, 10 meses
Puntos: 0
Duda con referencias en el reemplazo de preg_replace.

Hola, buenas, alguien puede explicarme las referencias en la cadena a reemplazar en preg_replace, por que por mas que leo el manual de php no me entero para que sirve, dejo aquí un código de ejemplo y alguna que otra duda que tengo sobre el.

Código PHP:
Ver original
  1. $rojo = preg_replace('/\{([0-9]+)\}/e','$matches[$1]','a=entry&id={2}&mintitle={1}');

Donde $matches es un array que tiene:

[0] = hola-3
[1] = hola
[2] = 3

El problema esta, que si al patrón de arriba, le quito los paréntesis, me saca exactamente lo que quiero que me saque, {1}, {2}, pero entonces no me funciona la referencia en $matches, a ver si alguien me puede explicar bien su funcionamiento.
Es decir el funcionamiento de \\n o $n.
Un saludo.
  #2 (permalink)  
Antiguo 14/02/2012, 21:07
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 5 meses
Puntos: 793
Respuesta: Duda con referencias en el reemplazo de preg_replace.

Si quieres que te saque {1}, {2} para que le dices todo lo contrario a PHP? Estas evaluando la expresión como código PHP (usando la e) y le estas diciendo que la captura de un número (paréntesis = subpatron o captura) entre llaves hace referencia a un valor en el array $matches. Esto quiere decir que {0} pasa a tener referencia al índice cero de tu array. Así con el 1 y con el 2.

$1 o \1 hace referencia al subpatron o captura número uno.

Cita:
El problema esta, que si al patrón de arriba, le quito los paréntesis, me saca exactamente lo que quiero que me saque, {1}, {2}
En esa parte me perdí ¿Exactamente que es lo que quieres hacer?
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #3 (permalink)  
Antiguo 15/02/2012, 10:11
 
Fecha de Ingreso: febrero-2012
Mensajes: 10
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Duda con referencias en el reemplazo de preg_replace.

Muchas gracias por la respuesta, ya creo que lo entiendo, te lo expongo aquí y tu me dices si estoy equivocado en algo:

Código PHP:
Ver original
  1. $rojo = preg_replace('/\{([0-9]+)\}/e','$matches[$1]','a=entry&id={2}&mintitle={1}');

preg_replace, ejecuta tanto en el "pattern" como en el "replacement" como un patrón unido, quiero decir que la /e de eval puesta en el pattern, se puede usar para lo que meta en el "replacement", en este caso $matches[$1].

Ahora bien, pongo los paréntesis en el "pattern" para sacar una segunda coincidencia y esta segunda coincidencia, sera un subpatrón, con los números que usare en $matches con el referenciador \\1 o $1.

Es decir, en el preg_replace, tengo dos cosas, un array con las coincidencias {1},{2} y {3} y otro array con los números 1,2,3 que son los que usare en $matches.

No se si me he explicado bien, espero haberlo hecho lo mejor posible.

Un saludo y gracias por todo.
  #4 (permalink)  
Antiguo 15/02/2012, 10:26
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 5 meses
Puntos: 793
Respuesta: Duda con referencias en el reemplazo de preg_replace.

Con \1 o $1 le dices que la captura o subpatron número UNO va a funcionar como el índice de tu array $matches.

Cita:
Iniciado por shirasep Ver Mensaje
Es decir, en el preg_replace, tengo dos cosas, un array con las coincidencias {1},{2} y {3} y otro array con los números 1,2,3 que son los que usare en $matches.
Sólo tienes un array llamado $matches, en resumen le estás diciendo que lo que encuentre con:

{0} lo reemplace por el valor de $matches[0]
{1} lo reemplace por el valor de $matches[1]
{2} lo reemplace por el valor de $matches[2]

Igual si colocas un índice que no exista te va a dar un error como da en el uso normal de los arrays.

al evaluarlo como código PHP y eso es todo.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #5 (permalink)  
Antiguo 15/02/2012, 10:52
 
Fecha de Ingreso: febrero-2012
Mensajes: 10
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Duda con referencias en el reemplazo de preg_replace.

Muchas gracias andrezdzphp, ahora si lo entiendo todo claro, y por lo que veo, el modificador eval, es solo para preg_replace.

Un saludo.

Etiquetas: reemplazo, referencias
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.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:18.