Foros del Web » Programación para mayores de 30 ;) » RegExp »

Obtener enlace imagen

Estas en el tema de Obtener enlace imagen en el foro de RegExp en Foros del Web. Buenos días: He programado un script en PHP que recupera una web mediante cURL. El código fuente de esta web lo tengo almacenado en una ...
  #1 (permalink)  
Antiguo 30/09/2014, 05:16
 
Fecha de Ingreso: abril-2009
Ubicación: En foros del web, normalmente en Web general, HTML y CSS.
Mensajes: 258
Antigüedad: 15 años
Puntos: 3
Obtener enlace imagen

Buenos días:

He programado un script en PHP que recupera una web mediante cURL. El código fuente de esta web lo tengo almacenado en una variable y quiero aplicarle una Expresión Regular para obtener el link de una imagen. Le he dedicado varias horas y he encontrado una decena de opciones (por si a alguien le sirve, he encontrado algunas opciones aquí: http://www.forosdelweb.com/f183/), pero no obtengo el resultado deseado, sé que con una mano más hábil se puede resolver en un momento.

La web la tengo en la variable "$resultado" (que es donde hay que buscar la imagen). El contenido es el siguiente:
Código HTML:
Ver original
  1. <!DOCTYPE ...
  2. <html>
  3. ...
  4. <img class="imageprod" src="http://www.pagina.com/recursos/imagenes/XXXXXXXXXX.jpg" alt="descripcion" border="0">
  5. ...
  6. </html>

La imagen se caracteriza por ser la primera con la clase "imageprod" (ya que posteriormente hay otras pero no me interesan), por eso he pensado que podría ser parte del patrón. El nombre de la imagen "XXXXXXXXXX" es una serie de 10 caracteres que pueden ser números o letras. Solo necesito el link (sin la etiqueta img ni ninguno de sus atributos).

He probado con un montón de cosas usando las funciones str_replace, preg_march y preg_replace de PHP. La opción que me ha parecido más correcta ha sido coger todo lo que no sea el enlace y sustituirlo por la cadena vacía "".

Código PHP:
Ver original
  1. $patron = "/([^=]=\"imageprod\")*/i";
  2.  
  3. /* Cualquier cosa que no sea el signo igual seguido de ="imageprod", es decir, desde el inicio de la web hasta encontrar la imagen (aunque no funciona porque después hay más imágenes con esa clase y necesito que afecte a la primera ocurrencia. */
  4.  
  5. echo preg_replace($patron, "", $resultado);

Otra opción:

Código PHP:
Ver original
  1. preg_match('/<img class=\"imageprod\" src=\"http://www.pagina.com/recursos/imagenes/[a-zA-Z0-9]+.jpg" alt=\"descripcion\" border=\"0\">/', $resultado, $coincidencias);
  2. echo $coincidencias[0];

Con este método debería devolverme la imagen con la etiqueta, pero ya me sería más sencillo utilizar la terminal de Ubuntu para quedarme solo con el link usando un grep.

No me importa si me proponéis otro método, agradecería a quien pudiera resolverme el problema ya que es muy urgente y lo tengo que tener listo para unas horas.

Un saludo.
__________________
¿Por qué Anónimo?, porque como está el mundo no podemos considerarnos humanos...

Última edición por Anonimo12; 30/09/2014 a las 05:23
  #2 (permalink)  
Antiguo 30/09/2014, 11:21
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Obtener enlace imagen

Cuando armes una expresión regular debes pensar en lo siguiente:

Que la especificidad sea mínima, mientras menos indicaciones debas dar es mejor, de otra forma terminarás con una expresión tan inerte que no funcionará con otros casos.

Por eso se llaman expresiones regulares, debes observar la regularidad, pero sin ser religioso con los detalles.

¿A qué me refiero?

Básicamente a que "crees" que buscar por la clase "imageprod" es parte de la solución, y por eso te pregunto, ¿de verdad es el único patrón convincente para analizar?

Yo confiaría más en la ruta de la imagen, si es regular entonces no hace falta más:
Código PHP:
Ver original
  1. $resultado = <<<HTML
  2.     <!DOCTYPE ...
  3.     <html>
  4.     ...
  5.     <img class="imageprod" src="http://www.pagina.com/recursos/imagenes/XXXXXXXXXX.jpg" alt="descripcion" border="0">
  6.     ...
  7.     </html>
  8. HTML;
  9.  
  10. preg_match('#http://www.pagina.com/recursos/imagenes/(.+?).jpg#', $resultado, $matches);
  11.  
  12. var_dump($matches);

¿Se entiende lo que te trato de explicar?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.

Etiquetas: enlace
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 20:11.