He vuelto a tener una duda existencial con las expresiones regulares, a ver si alguno sabe como solucionarlo. Cuando buscamos algo con expresiones regulares, no es sucesivo y va de izquierda a derecha, me explico:
Imaginemos que tengo la cadena <b>Hola <i>Mundo</i></b>
Si hiciera un preg_match_all, poniendo de patron algo como:
\<(.*)\>
Me cogería toda la cadena, ya que el sistema entiende:
<b>Hola <i>Mundo</i></b>Sin embargo, mi pregunta es, si esto se puede cambiar, para que buscase y diese de resultado:
<b>No se si me explico.. Esta duda existencial me viene a raiz de que quiero obtener la ruta de todas las imágenes de una página web. El contenido de esta página web lo tengo en una variable, entonces hago:
preg_match_all("/\<img(.*)src=(\"|')(.*(\.(jpg|png|gif)))(\"|')/",$valor,$asd);
En principio parece que funciona bien, pero si se encuentra con esto por ejemplo, no funciona bien:
<img src="http://imagen.png" width="320" /></a></div><a href="http://imagen.png">
Ya que me devuelve:
http://imagen.png" width="320" /></a></div><a href="http://imagen.png, en lugar de
http://imagen.pngAlguna solución? (tengo que hacerlo con expresiones regulares, no me valdria hacer explodes ni nada por el estilo)
Un saludo!