Wenas, estoy tratando de usar el preg_match_all y las expresiones regulares para poder buscar textos dentro de documentos html.
Si quisiera por ejemplo el interior del body de un html, lo que en principio se me ocurriría de hacer sería un:
preg_match_all('/(<body>)(.*)(<\/body>)/',$data,$resultado);
El problema es que cuando hay saltos de línea de por medio, esto no funciona.
A alguien se le ocurre algo que pudiera hacer? quizás borrar los saltos de línea? Como haría esto?
Un saludo y gracias!
Wenas, he estudiado ese tema este año en la uni aunq no exactamente con lo que tu intentas, pero el error es que el operador comodin (el "." que pones ai) acepta cualquier caracter excepto el salto de linea, creo que una posible solucion seria que pusieses en un conjunto que aceptas el comodin y el salto de linea, algo asi he estudiado yo: [.\n]*, o tmb aunq esta nose si te valdria al 100%, puedes poner q aceptas todo menos entrecomillados o algun caracter que no kieras, ej: [^\"].
Exacto.
Al final lo solucioné casi como me dijiste, de la siguiente forma
((.*)\n*)
Ya que sino, solo podia tomar un caracter + salto de línea
Un saludo!
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.png
Alguna solución? (tengo que hacerlo con expresiones regulares, no me valdria hacer explodes ni nada por el estilo)
Un saludo!
Mira esta que acabo de crear, es un poco avanzada!.
<img.+src=(?:\"|\')(?i)([^"']+)(?<=png|jpg|gif)(?-i)
Prueba la y cuenta.
Regular Expressions - Repetition with Star and Plus (http://www.regular-expressions.info/repeat.html) mira la parte de "Watch Out for The Greediness!"
:)
Muy bueno, no lo conocía!