Comunidad de diseño web y desarrollo en internet online

Expresiones regulares

Citar            
MensajeEscrito el 09 Mar 2012 10:01 am
Mi duda parte de éste código

escribió:

<div id="contain">
<span>test</span>
<span>test</span>
<span>test</span>
</div>
<div id="contain">
<span>test</span>
<span>test</span>
<span>test</span>
</div>


¿Qué intento hacer?, pues procesar lo que esta dentro de los divs, tengo esta expresión:

Código PHP :

$text = '<div id="contain">
  <span>test</span>
  <span>test</span>
  <span>test</span>
</div>
<div id="contain">
  <span>test</span>
  <span>test</span>
  <span>test</span>
</div>';
preg_match_all("/<div id=\"contain\">([\w\W]+)<\/div>/", $text, $matches);
print_r($matches);


Y de respuesta obtengo:

escribió:

Array
(
[0] => Array
(
[0] => <div id="contain">
<span>test</span>
<span>test</span>
<span>test</span>
</div>
<div id="contain">
<span>test</span>
<span>test</span>
<span>test</span>
</div>
)
[1] => Array
(
[0] =>
<span>test</span>
<span>test</span>
<span>test</span>
</div>
<div id="contain">
<span>test</span>
<span>test</span>
<span>test</span>
)
)


Lo que quiero es obtener lo que esta entre <div id="contain"> y </div> para manipular, obviamente, lo que esta dentro.

Creo que el error consiste en que empieza desde <div id="contain"> y termina en el último </div> por lo que tendría que darle un "límite" a buscar y es lo que ahora no se hacer.

Gracias de antemano.

P.D. Cambie la expresión por preg_match_all("/<div id=\"contain\">(.*)<\/div>/s", $text, $matches); y aún así tengo el mismo resultado; sé que tengo que agregar un "delimitador final" pero no lo logro.

Espero me ayuden.

P.D.2: Reitero, ocupo procesar todo lo que este dentro de cada <div id="contain"> y </div> pero no lo logro.

Por kh0d3x

7 de clabLevel



 

chrome
Citar            
MensajeEscrito el 09 Mar 2012 12:25 pm
La segunda expresión regular es casi la que estás buscando, solo te faltó especificar que la subexpresión en paréntesis sea solo una o ninguna vez:

Código :

/<div id=\"contain\">(.*?)<\/div>/is

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 09 Mar 2012 11:05 pm
Uff, era exáctamente lo que buscaba, aunque yo intente con /sU para al parecer el U me detiene la comprobación al primer match. Y disculpa que aproveche pero podrías explicarme un poco mas esa expresión, creí que si utilizaba .* para 0 o más veces pero no que podía emplearla con el ? para indicar que se debe cumplir lo anterior, ahora la s se que es cualquier caracter como espaciador, tabulador, saltos de línea y demás pero el "i"? Si no es mucho pedir agradecería que me explicaras esa expresion que me funcionó perfectamente.

Por kh0d3x

7 de clabLevel



 

chrome
Citar            
MensajeEscrito el 09 Mar 2012 11:14 pm
Creo que ya entendí, indico que solo sea una o 0 veces por lo que ya me lo divide como quiero, pero el i no recuerdo para que sirve.

P.D. Perdon por el doble post pero no encontre botón editar.

Por kh0d3x

7 de clabLevel



 

chrome
Citar            
MensajeEscrito el 10 Mar 2012 01:48 pm
Esto "/is" al final de la expresión son modificadores. La "i" indica que no debe discriminarse entre mayúculas y minúsculas. Como estás tratando código HTML me pareció que era apropiado ya que el código HTML es insensible a mayúsculas.
Y la "s" indica que debe tratarse el texto objetivo como si fuera una sola línea continua, es decir, no tiene en cuenta saltos de texto, lo cual también me pareció apropiado en tu caso.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 11 Mar 2012 02:27 am
Sí, y con el .*? estoy indicando que me busque cualquier caracter solo una vez. Corrígeme si me equivoco.

Por kh0d3x

7 de clabLevel



 

chrome
Citar            
MensajeEscrito el 11 Mar 2012 11:58 am
Sí, eso mismo, "cualquier cosa una vez".

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 11 Mar 2012 12:39 pm
Muchas gracias por la atención.

Por kh0d3x

7 de clabLevel



 

chrome
Citar            
MensajeEscrito el 26 Ago 2012 10:25 pm
tengo un problema al jalar contenido de una pagina este es mi ejemplo :

<?php
$contenido=file_get_contents('http://www.lapagina.com');
preg_match_all("#<div style=\"color:red\">(.*)</div>#", $contenido, $matches);
$jalar=$matches[1];
?>

aqui es donde imprimo

<?php echo $jalar;?> y nada

entiendo que aqui :

preg_match_all("#<div style=\"color:red\">(.*)</div>#", $contenido, $matches);

seria $matches[1] xq en aqui (.*) coge un valor

y en este otro :

preg_match_all("#<div style=\"color:red\">(.*)</div><div>(.*)</div>#", $contenido, $matches2);

$matches[2] agarro la segunda (.*) esto es un ejemplo nada mas

no q no entiendo es

PD: no te no entiendo es en $matches[1 ] o $matches[1][0] es lo no entiendo , 0 de donde sale ese valores ps cuando estoy buscando aparece en e navegador en blanco nulo

o se a $matches[1][0] es cero de donde sale o sea 0 , 1 no se hasta donde


espero me ayuden a mi problema

Por cesarp155

6 de clabLevel



 

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.