Foros del Web » Programando para Internet » PHP »

Buscar en un string con preg_match_all

Estas en el tema de Buscar en un string con preg_match_all en el foro de PHP en Foros del Web. Hola, buenas tardes. A pesar de ser nuevo, hace meses que os sigo y me ayudado mucho ^^. Ahora tengo una duda que no encuentro ...
  #1 (permalink)  
Antiguo 27/07/2010, 12:09
 
Fecha de Ingreso: julio-2010
Mensajes: 24
Antigüedad: 13 años, 8 meses
Puntos: 1
Buscar en un string con preg_match_all

Hola, buenas tardes. A pesar de ser nuevo, hace meses que os sigo y me ayudado mucho ^^. Ahora tengo una duda que no encuentro solución. He buscado en vuestros foros, en google... Llevo 2 días batallando y no le veo solución.

La cuestión es:
Dispongo de una variable con el contenido de una web.
Del código de esa web me interesa esta parte:

Código HTML:
Ver original
  1. <div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/_Yi1PcAy-8l4/TEy8yQvd-QI/AAAAAAAADuY/c_fIAre91jo/s1600/5134.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/_Yi1PcAy-8l4/TEy8yQvd-QI/AAAAAAAADuY/c_fIAre91jo/s1600/5134.jpg" /></a></div><b>Release number:</b>    #DSi 0070<br />
  2. Info: <b>Prince of Persia: The Forgotten Sands </b>(USA)<br />
  3. <b>Languages:</b>  English, Français, Deutsch, Italiano, Español, Nederlands<br />
  4. <b>File name:</b>  ind-5017<br />
  5. <b>Archive size:</b>  512Mbit </div><a name='more'></a><div style="text-align: center;"><b>Download Links:</b> <a href="http://www.megaupload.com/?d=X3IMJBSI">Megaupload</a><br />
  6. <b> Mirror:</b> <a href="http://freakshare.net/files/e6drx6wz/XXXX_Prince_of_Persia_The_Forgotten_Sands_USA_iNTERNAL_DSi_NDS-iND.rar.html">Freakshare</a></div>

De esta parte me interesan 5 cosas. La Info, los Languages, el Archive size, el Link de megaupload y el Link de la imagen.

Por mas que lo e intentado no e conseguido nada >.< soy un negado con las expresiones regulares ...
Si alguien fuera tan amable de intentar solucionar el problema :D


Ahora mismo la pagina que coge la información esta así:

Código PHP:
Ver original
  1. $contenido = file_get_contents('http://www.naspev.com/2010/07/dsi-0067-prince-of-persia-forgotten.html'); //Pasamos el contenido de la web a una variable
  2.  
  3. $patron='';
  4. preg_match_all($patron, $contenido, $coincidencias, PREG_SET_ORDER);
  5. print_r ($coincidencias);

Última edición por maruk1; 27/07/2010 a las 15:16
  #2 (permalink)  
Antiguo 27/07/2010, 12:37
 
Fecha de Ingreso: julio-2008
Mensajes: 201
Antigüedad: 15 años, 9 meses
Puntos: 11
Respuesta: Buscar en un string con preg_match_all

Explícate un poco más por favor...
¿El primer código de dónde sale?
Si le pones un Highlight de HTML será más legible :)
  #3 (permalink)  
Antiguo 27/07/2010, 12:43
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Buscar en un string con preg_match_all

a ver si alguien intenta solucionar tu problema??

lo que podemos hacer es ayudarte, pero no hacer tu trabajo... porque se supone que el esfuerzo debe ser tuyo, ya que puede ser una solución muy sencilla.... pero, es tu problema....

por favor, te sugiero leer lo siguiente:
http://www.forosdelweb.com/f18/aport...s-pcre-646110/

y cuando ya no seas tan negado en expresiones, pues intenta... y si tienes dudas, para eso estamos!!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #4 (permalink)  
Antiguo 27/07/2010, 13:46
 
Fecha de Ingreso: julio-2010
Mensajes: 24
Antigüedad: 13 años, 8 meses
Puntos: 1
Respuesta: Buscar en un string con preg_match_all

El primer código es una parte de la web que consulto para conseguir los datos en los que estoy interesado.

Pateketrueke no era mi intención quedarme con las manos cruzadas mientras me hacéis xD. Lo siento si lo has entendido así
Me referia a que a ver si me podéis indicar por donde van los tiros porque, como he dicho, no se me dan muy bien las expresiones regulares.
  #5 (permalink)  
Antiguo 27/07/2010, 13:53
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Buscar en un string con preg_match_all

Cita:
Iniciado por maruk1 Ver Mensaje
El primer código es una parte de la web que consulto para conseguir los datos en los que estoy interesado.

Pateketrueke no era mi intención quedarme con las manos cruzadas mientras me hacéis xD. Lo siento si lo has entendido así
Me referia a que a ver si me podéis indicar por donde van los tiros porque, como he dicho, no se me dan muy bien las expresiones regulares.
es que ese precisamente es el detalle, debes aprender expresiones regulares...

mira, si te vamos guiando desde aquí sería como repetir lo que los manuales dicen, y vamos, no hay mejor información que la oficial...

ahora, los tiros van por: lee el manual, o alguna referencia de regex

curiosamente aquí va un ejemplo...
Código PHP:
$regex '|Languages:</b>\s*([^<>]+)<br\s*/>|is'
y para la mayoría de los casos resulta genérica la expresión, el concepto es idéntico, y si lo entiendes sin leer una referencia eres genial...

pero... si después de leer algunas cosas aún no te queda claro, puedes contar con nosotros para orientarte objetivamente... mas no así con tu propio esfuerzo... (:
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #6 (permalink)  
Antiguo 27/07/2010, 15:08
 
Fecha de Ingreso: julio-2010
Mensajes: 24
Antigüedad: 13 años, 8 meses
Puntos: 1
Respuesta: Buscar en un string con preg_match_all

Después de analizar el código que me as dado he conseguido realizar la expresión para sacar el Tamaño que busco.
Código HTML:
"|Archive\s*size:</b>\s*([^<>]+)\s*</div>|is";
Según e ido leyendo entiendo que:
Con el | nos indican el principio y el final
\s Nos indica que hay un "espacio en blanco".
* Nos indica que puede a ver mas caracteres, en mi caso, mas "espacios"
Con la i nos indican que no distinguimos entre Mayúsculas i Minúsculas
Con la s lo seleccionamos todo

Donde mas dudas tengo es en ([^<>]+). Me he leído la pagina que me has pasado y Wikipedia y no termino de entenderla
Se que el + nos indica que almenos tiene que aparecer una vez el caracter siguiente, en el caso de ([^<>]+) no se a que se refiere.

Edito:
He conseguido sacar la Info:
Código HTML:
Ver original
  1. "|Info:\s*<b>([^<>]+)\s*</b>|is"

Última edición por maruk1; 27/07/2010 a las 15:14
  #7 (permalink)  
Antiguo 27/07/2010, 15:15
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Buscar en un string con preg_match_all

perfecto!!

este tipo de temas son los que se deben saber valorar, el esfuerzo propio es parte del nuestro, del de todos en el foro: este si es un verdadero aporte, gracias a ti maruk1 por comprender esta filosofía...

ahora, con respecto al ([^<>]+) es algo sencillo de explicar:

- los paréntesis significan una captura literal de la expresión en el texto
- los corchetes son para agrupar conjuntos de caracteres, no frases
- el ^ dentro de los corchetes equivale a una negación del conjunto
- y los <> son literales, osea: todo lo que no sea <>

en dicho caso, captura eso... osea que se detendría el parser al encontrar el <br> haciendo esta literal opcional, pero la coloco solo para dejar en claro la expresión... (:
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #8 (permalink)  
Antiguo 27/07/2010, 15:19
 
Fecha de Ingreso: julio-2010
Mensajes: 24
Antigüedad: 13 años, 8 meses
Puntos: 1
Respuesta: Buscar en un string con preg_match_all

Muchas Gracias por tus ánimos ^^
Espero seguir aprendiendo, mientras mi mente me lo permita xD

Voy a ver si consigo sacar las URL
  #9 (permalink)  
Antiguo 27/07/2010, 15:35
 
Fecha de Ingreso: julio-2010
Mensajes: 24
Antigüedad: 13 años, 8 meses
Puntos: 1
Respuesta: Buscar en un string con preg_match_all

Bueno, ya tengo los 5 datos que me interesan, ahora voy a tratarlos y a ponerlos a la Base de datos ^_^
Para los interesado les dejo la expresión y de donde la saco. Puede servir para los que necesitan ayuda, como yo
Código PHP:
Ver original
  1. $lenguages="|Languages:</b>\s*([^<>]+)<br\s*/>|is"; //<b>Languages:</b>  English, Français, Deutsch, Italiano, Español, Nederlands<br />
  2. $size="|Archive\s*size:</b>\s*([^<>]+)\s*</div>|is"; //<b>Archive size:</b>  512Mbit </div>
  3. $nombre="|Info:\s*<b>([^<>]+)\s*</b>([^<>]+)<br\s*/>|is"; //Info: <b>Prince of Persia: The Forgotten Sands </b>(USA)<br /> ATENCIÓN [1]==>Nombre del juego   [2]==>Región!
  4. $links='|<b>Download\s*Links:</b>\s*<a\s*href="([^<>]+)">|is'; //<b>Download Links:</b> <a href="http://www.megaupload.com/?d=X3IMJBSI">
  5. $imagen='|<img\s*border="0"\s*src="([^<>]+)"\s*/></a>|is'; //<img border="0" src="http://2.bp.blogspot.com/_Yi1PcAy-8l4/TEy8yQvd-QI/AAAAAAAADuY/c_fIAre91jo/s1600/5134.jpg" /></a>

Un Último detalle, a ver si seria posible juntar las 5 expresiones un una ^^, es para no hacer 5 conexión a la web

Última edición por maruk1; 27/07/2010 a las 15:50

Etiquetas: string
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 21:57.