Ver Mensaje Individual
  #4 (permalink)  
Antiguo 18/09/2013, 08:37
pitger
 
Fecha de Ingreso: septiembre-2013
Mensajes: 33
Antigüedad: 10 años, 7 meses
Puntos: 4
Respuesta: Cargar datos extraidos con 'RegExpr' en array php

Bueno, he encontrado una solución, pero estoy convencido que no es la mas propia (igual que me pasó con la expresión regular, hice una que me valía pero su sintaxis, aunque válida era bastante fea).

Allá voy con mi solución a este segundo problema:

Código PHP:
 <?php
while( $resultado mysql_fetch_array($familia) ){

$cadena=$resultado["post_text"];
$patron  "|<a\s+href[^<>]*>(.+?)</a>|";        
preg_match_all($patron$cadena$coincidencias);


//aquí cargo los divs y datos específicos correspondientes, 
//y para el recuento de fotos usando...
echo count ($coincidencias[0]);

// luego algo mas de contenidos, y la foto...
print_r($coincidencias[0][0]);

//y una vez con esos datos finalizo el while 
}?>
La diferencia empieza en el preg_match, que lo he convertido en preg_match_all porque segun la documentación que se lee en http://es1.php.net/manual/es/function.preg-match.php(*estoy hasta los huevos del pu.. <noparse> que no me deja meter enlaces), dice que en el array que recibe los datos (denominado 'matches' en la explicación) tiene este comportamiento:
Cita:
Si se proporciona matches, entonces éste se llena con los resultados de la búsqueda. $matches[0] contendrá el texto que coincidió con el patrón completo, $matches[1] tendrá el texto que coincidió con el primer sub-patrón entre paréntesis capturado, y así sucesivamente.
Quizá por eso los resultados devueltos no estaban saliendo bien, porque preg_match iba utilizando sub-patrones en cada siguiente valor del array y si no usa todo el patrón el invento falla.

Con preg_match_all sin embargo devuelve todos los resultados que coinciden con el patrón, pero los carga todo en un array multidimensional de modo que los valores que necesito estan todos en $coincidencias[0] y va desde $coincidencias[0][0] hasta $coincidencias[0][n].

Eso está bien, porque así me funciona, es como tengo ahora hecho, pero me preocupa que genere este tipo de array porque tengo la sensación que pierde eficiencia y que debería cargar los datos en un array simple que fuese desde $coincidencias[0] hasta $coincidencias[n], sin mas.

También lo he intentado con preg_split() que funciona utilizando el patrón a modo de separador en una cadena... y a mi me funcionaría si tuviese los links puestos uno tras otro sin mas, pero coincide que los usuarios a veces, además de meter la serie de enlaces, introducen otro tipo de contenidos y textos por lo que necesito que se discrimine y seleccione solamente a las cadenas de texto que coinciden con el patrón.

POR CIERTO!!!! Estoy viendo el patrón que me pasó pateketrueke (|<a\s+href[^<>]*>(.+?)</a>|)... me surge la duda de si ese script resuelve mi problema al 100%

Lo que yo quiero extraer o usar es algo tipo <a href....><img src="http://www.forosdelweb.com/f18/cargar-datos-extraidos-con-regexpr-array-php-1073867/.......... ></a> (un link que contiene como objeto enlazado una imagen)
¿qué pasaría ante el siguiente código, <a href....>texto</a> , lo usaría también?

Desde ya, gracias.