Foros del Web » Programando para Internet » PHP »

Filtrar texto con preg_replace

Estas en el tema de Filtrar texto con preg_replace en el foro de PHP en Foros del Web. ¡¡Hola!! Tengo una función preg_replace que elimina el texto comprendido entre las palabras Estacion y Direccion. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original preg_replace ( "%(Estacion)(.*?)(Direccion)%is" ...
  #1 (permalink)  
Antiguo 01/08/2014, 04:24
Avatar de nolose  
Fecha de Ingreso: diciembre-2007
Ubicación: España
Mensajes: 165
Antigüedad: 12 años
Puntos: 2
Filtrar texto con preg_replace

¡¡Hola!!

Tengo una función preg_replace que elimina el texto comprendido entre las palabras Estacion y Direccion.

Código PHP:
Ver original
  1. preg_replace("%(Estacion)(.*?)(Direccion)%is","",$entrada);

EJ:
CADENA ORIGINAL: "La Estacion Pepito Perez esta en la Direccion Avenida de Madrid"
RESULTADO: "La Avenida de Madrid"


El caso es, que quiero que se haga al revés, es decir que tan solo quede el texto comprendido entre Estacion y Direccion.

EJ:
CADENA ORIGINAL: "La Estacion Pepito Perez esta en la Direccion Avenida de Madrid"
RESULTADO: "Pepito Perez esta en la"


¿Alguien sabe como es????
  #2 (permalink)  
Antiguo 01/08/2014, 06:09
Avatar de HackID1  
Fecha de Ingreso: febrero-2013
Ubicación: En Update
Mensajes: 487
Antigüedad: 6 años, 9 meses
Puntos: 17
Respuesta: Filtrar texto con preg_replace

Holaa.!!!

Te dejo una función en la cual haces uso del Explode para dividir la cadena inicial separada por los trozos que queremos, indicando un principio y un final de corte.

Código PHP:
Ver original
  1. <?php
  2.  
  3.  /*Extrae el texto entre 2 PALABRAS */
  4.  
  5. $texto = "La Estacion Pepito Perez esta en la Direccion Avenida de Madrid" ;
  6.  
  7. function obtenemos($completa,$ini,$fin){
  8.     $resultado = explode($ini, $completa);
  9.         if (isset($resultado[1])){
  10.         $resultado = explode($fin, $resultado[1]);
  11.         return $resultado[0];
  12.         }
  13.     return '';
  14. }
  15.  
  16.  
  17. echo obtenemos($texto,'Estacion','Direccion');
  18.  
  19. ?>

Saludos
__________________
Puntuar +1 es buena forma de dar las gracias. :P
Your Time is limited, so don't waste it living someone else´s life.
Por: HackID1
  #3 (permalink)  
Antiguo 01/08/2014, 09:14
Avatar de nolose  
Fecha de Ingreso: diciembre-2007
Ubicación: España
Mensajes: 165
Antigüedad: 12 años
Puntos: 2
Respuesta: Filtrar texto con preg_replace

Cita:
Iniciado por HackID1 Ver Mensaje
Holaa.!!!

Te dejo una función en la cual haces uso del Explode para dividir la cadena inicial separada por los trozos que queremos, indicando un principio y un final de corte.

Código PHP:
Ver original
  1. <?php
  2.  
  3.  /*Extrae el texto entre 2 PALABRAS */
  4.  
  5. $texto = "La Estacion Pepito Perez esta en la Direccion Avenida de Madrid" ;
  6.  
  7. function obtenemos($completa,$ini,$fin){
  8.     $resultado = explode($ini, $completa);
  9.         if (isset($resultado[1])){
  10.         $resultado = explode($fin, $resultado[1]);
  11.         return $resultado[0];
  12.         }
  13.     return '';
  14. }
  15.  
  16.  
  17. echo obtenemos($texto,'Estacion','Direccion');
  18.  
  19. ?>

Saludos
¡¡ Excelente aporte HackID1 !!
Muchas gracias :)

Funciona perfectamente, aunque me hubiese gustado emplear la función preg_replace();

Si alguien sabe configurarla correctamente... ¡Estaré encantado de escucharle!
  #4 (permalink)  
Antiguo 01/08/2014, 11:12
Avatar de Alexis88
Objetivista
 
Fecha de Ingreso: noviembre-2011
Ubicación: Lima, Perú
Mensajes: 5.431
Antigüedad: 8 años
Puntos: 930
Respuesta: Filtrar texto con preg_replace

Así de buenas a primeras, se me ocurre algo como esto:

Código PHP:
Ver original
  1. echo preg_replace('/La (Estacion .*? Direccion) Avenida de Madrid/is', '$1', $entrada);

Lo anterior imprimirá 'Estacion Pepito Perez esta en la Direccion'. Lo único que hice fue colocar la parte a buscar entre paréntesis y dado que es el único grupo anónimo en la expresión regular, hago referencia a él con $1, siendo esto lo que reemplazará al texto original.

Saludos
__________________
«Laissez faire et laissez passer, le monde va de lui même»
  #5 (permalink)  
Antiguo 05/08/2014, 16:38
Avatar de nolose  
Fecha de Ingreso: diciembre-2007
Ubicación: España
Mensajes: 165
Antigüedad: 12 años
Puntos: 2
Respuesta: Filtrar texto con preg_replace

Cita:
Iniciado por Alexis88 Ver Mensaje
Así de buenas a primeras, se me ocurre algo como esto:

Código PHP:
Ver original
  1. echo preg_replace('/La (Estacion .*? Direccion) Avenida de Madrid/is', '$1', $entrada);

Lo anterior imprimirá 'Estacion Pepito Perez esta en la Direccion'. Lo único que hice fue colocar la parte a buscar entre paréntesis y dado que es el único grupo anónimo en la expresión regular, hago referencia a él con $1, siendo esto lo que reemplazará al texto original.

Saludos
Le he estado dando unas vueltas a tu aporte pero no consigo entender en que podría servir para este problema.

La idea es, que la funcion preg_replace extraiga el texto entre los delimitadores Estación y Dirección. Tu incluyes otras partes de la cadena que no deberían de aparecer (esto es un simple ejemplo, pero la cadena podría cambiar).

Además, en el resultado no deberían mostrarse las palabras delimitadoras Estacion y Direccion


No obstante, no tengo conocimientos suficientes acerca del grupo anónimo que mencionas y no me atrevo a opinar demasiado sobre el tema ni a dar una solución fiable...

¿ideas?
  #6 (permalink)  
Antiguo 05/08/2014, 16:57
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 11 años, 8 meses
Puntos: 2534
Respuesta: Filtrar texto con preg_replace

Cita:
No obstante, no tengo conocimientos suficientes acerca del grupo anónimo que mencionas y no me atrevo a opinar demasiado sobre el tema ni a dar una solución fiable...

¿ideas?
Fácil: consulta una referencia para que entiendas lo que sucede.

La expresión debería ser así:
Cita:
/Estacion (.*?) Direccion/is
La idea es, como dices, capturar lo que se encuentre entre "Estación" y "Dirección" y eso justamente hace la expresión regular.

Y desde luego la función correcta sería preg_match(), pues no buscar reemplazar texto sino capturarlo.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.

Etiquetas: filtrar
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 02:29.