Usando expresiones regulares cuando hay saltos de línea

Iniciado por ‭lipman, 27 Junio 2011, 11:16 AM

0 Miembros y 1 Visitante están viendo este tema.

‭lipman

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!

Darkgold9

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: [^\"].

‭lipman

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!

‭lipman

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!

~ Yoya ~

Mira esta que acabo de crear, es un poco avanzada!.

<img.+src=(?:\"|\')(?i)([^"']+)(?<=png|jpg|gif)(?-i)

Prueba la y cuenta.
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

raul338