Foros del Web » Programando para Internet » PHP »

Expresiones regulares

Estas en el tema de Expresiones regulares en el foro de PHP en Foros del Web. Estoy creando una aplicación que recoge y procesa html de una web externa, exactamente, de unas tablas que contienen valores numéricos. La mejor manera para ...
  #1 (permalink)  
Antiguo 16/04/2011, 05:20
 
Fecha de Ingreso: octubre-2009
Ubicación: En el ordenador
Mensajes: 504
Antigüedad: 14 años, 7 meses
Puntos: 10
Expresiones regulares

Estoy creando una aplicación que recoge y procesa html de una web externa, exactamente, de unas tablas que contienen valores numéricos. La mejor manera para extraerlo, pienso, es un "preg_match_all", y procesar sus datos, pero hay un problema:

Código HTML:
 <td>
                            3
                        </td>
                        <td>

                            11
                            <td>
                                13
                            </td>
                            <td>
                                15
                            </td> 
En este trozo de fragmento html, que es lo que se recoge de la web, se ve que hay un error, la celda del 11 no está cerrada (y esto pasa en cada fila de registros). Este problema, al ser una web externa, no lo puedo solucionar, y me da problemas, ya que no puedo recoger el valor 13 (en el array de datos, tengo el 3, el 11 y me salta al 15).

Mi expresión regular es esta:
Código:
#<td\>[ \t\n\r]*([0-9/]+)[ \t\n\r]*[<\/td\>]?#
Esta expresión funciona bien, pero tiene el problema del <td> no cerrado, y me gustaría saber como se podria solucionar.

Alguna idea?

Gracias de antemano.
__________________
Buscando ideas para proyectos....

Esperando a tener 18 años....
  #2 (permalink)  
Antiguo 16/04/2011, 06:03
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Expresiones regulares

Que tal markmb,

No deberías utilizar regexp para parsear html, es preferible recaer sobre el parser del DOM, te dejo un ejemplo, con tu html:

Código PHP:
Ver original
  1. $html =  '<tr>
  2.            <td>3</td>
  3.             <td>11
  4.             <td>13</td>
  5.             <td>15</td>
  6.          </tr>';
  7.  
  8. $dom = DOMDocument::loadHTML($html);
  9. foreach($dom->getElementsByTagName('td') as $td) {
  10.     echo trim($td->nodeValue) . PHP_EOL;
  11. }

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #3 (permalink)  
Antiguo 16/04/2011, 06:10
 
Fecha de Ingreso: octubre-2009
Ubicación: En el ordenador
Mensajes: 504
Antigüedad: 14 años, 7 meses
Puntos: 10
Respuesta: Expresiones regulares

Muchas gracias!

No conocía el DOM, y me ha sido muy útil
__________________
Buscando ideas para proyectos....

Esperando a tener 18 años....

Etiquetas: expresiones, regulares
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 00:13.