Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] solo me tira la primera búsqueda y el resto no

Estas en el tema de solo me tira la primera búsqueda y el resto no en el foro de PHP en Foros del Web. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original function cortar1 ( $fuente , $izq , $der ) {         eregi ( " $izq (.*) ...
  #1 (permalink)  
Antiguo 18/09/2014, 18:01
Avatar de danistrein  
Fecha de Ingreso: septiembre-2008
Ubicación: Salta Capital
Mensajes: 550
Antigüedad: 15 años, 7 meses
Puntos: 9
Pregunta solo me tira la primera búsqueda y el resto no

Código PHP:
Ver original
  1. function cortar1($fuente,$izq,$der){
  2.         eregi("$izq(.*)$der",$fuente,$salida);
  3.         return $salida;
  4.     }
  5.     function cortar2($fuente,$izq,$der){
  6.         $izq = preg_quote($izq,'/');
  7.         $der = preg_quote($der,'/');
  8.         preg_match_all("/".$izq."(.+)".$der."/", $fuente, $salida);
  9.         return $salida;
  10.     }

como pueden observar, las dos funciones son iguales, las dos buscan un cadena dentro de otra cadena según el empiezo y el final que se busque, es decir, hace esto:

Código PHP:
Ver original
  1. $cadena= '<etiqueta>uno</etiqueta> contenido <etiqueta>dos</etiqueta> sigue el contenido <etiqueta>uno</etiqueta>';
  2. $cadena = cortar($cadena, '<etiqueta>','</etiqueta>');

el resultado es:

Código PHP:
Ver original
  1.       0=>array( 0=> '<etiqueta>uno</etiqueta>', 1=>'TODA LA CADENA') ),
  2.       1=>array( 0=> 'uno', 1=>'TODA LA CADENA') )
  3. )

hasta hay anda perfecto, busca bien y da el resultado, pero solo muestra el resultado de la primera etiqueta que encontró, alguien sabe que puede ser?

desde ya muchas gracias
__________________
Appones.net - www.appones.net
  #2 (permalink)  
Antiguo 18/09/2014, 19:04
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: solo me tira la primera búsqueda y el resto no

No se cual de ambas funciones estés probando, pero al menos con preg_match_all() no resulta porque la expresión es demasiado ambiciosa.

Voy a omitir ereg() porque sencillamente está obsoleta.

Código PHP:
Ver original
  1. <?php
  2.  
  3. function cortar2($fuente,$izq,$der){
  4.     $izq = preg_quote($izq,'/');
  5.     $der = preg_quote($der,'/');
  6.     preg_match_all("/".$izq."(.+)".$der."/", $fuente, $salida);
  7.     return $salida;
  8. }
  9.  
  10. $cadena= '<etiqueta>uno</etiqueta> contenido <etiqueta>dos</etiqueta> sigue el contenido <etiqueta>uno</etiqueta>';
  11. $cadena = cortar2($cadena, '<etiqueta>','</etiqueta>');
  12.  
  13. var_dump($cadena);
  14.  
  15. /*
  16. array(2) {
  17.   [0] =>
  18.   array(1) {
  19.     [0] =>
  20.     string(103) "<etiqueta>uno</etiqueta> contenido <etiqueta>dos</etiqueta> sigue el contenido <etiqueta>uno</etiqueta>"
  21.   }
  22.   [1] =>
  23.   array(1) {
  24.     [0] =>
  25.     string(82) "uno</etiqueta> contenido <etiqueta>dos</etiqueta> sigue el contenido <etiqueta>uno"
  26.   }
  27. }
  28. */

Y desde luego el resultado es muy lejos de lo que dices "anda perfecto", así que al menos con preg_match_all() no sirve lo que mencionas.

Ahora, si cambio la captura de (.+) a (.+?) ya funciona perfecto, pues la expresión es menos ambiciosa y analiza todos los pares de etiquetas, etc.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 18/09/2014, 19:37
Avatar de danistrein  
Fecha de Ingreso: septiembre-2008
Ubicación: Salta Capital
Mensajes: 550
Antigüedad: 15 años, 7 meses
Puntos: 9
Respuesta: solo me tira la primera búsqueda y el resto no

eres el mejor! muchísimas gracias, no sabia que usando otro cuantificador sobre uno mismo podía reducir la ambición de la expresión, cada día aprendo algo nuevo
__________________
Appones.net - www.appones.net

Etiquetas: busqueda, cadena, eregi, preg_match_all
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 12:44.