Ver Mensaje Individual
  #3 (permalink)  
Antiguo 24/08/2009, 17:03
zafio
 
Fecha de Ingreso: agosto-2009
Mensajes: 2
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Obtener datos con expresiones regulares

Hola abimaelrc, esta noche he conseguido sacar lo que queria, pero mediante bucles. Lo que yo hago aqui con no se cuantos bucles, se que se puede hacer con una sola "expresión regular".

Codigo PHP:

<?php

//Cadena a analizar.
$eestring = '<dato1:16>contenido dato 1<dato2:16>contenido dato 2';

//tamaño de la cadena
$longitud = strlen($eestring);

//contadores
$n_buffer01 = 0;
$n_buffer02 = 0;

$n_reg01 = 0;
$n_reg02 = 2;

//bucle que analiza la cadena
for ($n = 0; $n <= $longitud; $n++)
{

//si detecta < ponemos contenido y $etiqueta en 'ok' (ya se que con expresiones boolean queda mejor)
//con $contenido le indicamos que contiene datos o un campo a analizar
//$n_reg01 es un contador y cada vez que detecta una < suma 1 y asi mas adelante podemos compararlo con $n_reg02.
if ($eestring[$n] == '<'){$contenido = 'ok'; $etiqueta = 'ok'; $n_reg01++;}

//si detecta > le indicamos que hemos cerrado la $etiqueta con 'no'
if ($eestring[$n] == '>'){$etiqueta = 'no'; $procesar = 'ok';}

//Si $etiqueta es 'ok' almacenamos los datos en el $buffer01
if ($etiqueta == 'ok')
{
if ($eestring[$n] != '<') //con este if evitamos que se nos meta el caracter < en el $buffer01
{
$buffer01[$n_buffer01] = $eestring[$n];
//vemos que hace todo bien...
//echo "[$n_buffer01] --> $buffer01[$n_buffer01] <---> n_reg01 = $n_reg01 n_reg02 = $n_reg02<br />";
$n_buffer01++;
}
}

//si hemos detectado > y hemos cerrado la $etiqueta con un 'no' pero contiene datos = $contenido almacenamos
//el texto en el $buffer02
if (($etiqueta == 'no') and ($contenido == 'ok'))
{
if ($eestring[$n] != '>')
{
$buffer02[$n_buffer02] = $eestring[$n];
//vemos que hace todo bien...
//echo "$n_buffer02 --> $buffer02[$n_buffer02] <br />";
$n_buffer02++;
}
}

//si hemos empezado a analizar un registro nuevo o es el final del string, muestra los datos
if (($n_reg01 >= $n_reg02) or ($n >= $longitud))
{
//pasamos los datos de array a string
$el_buffer01 = arraytostr ($buffer01);
$el_buffer02 = arraytostr ($buffer02);
//mostramos los datos
echo "----------------------<br />";
echo "Buffer01: $el_buffer01<br />";
echo "Buffer02: $el_buffer02<br />";
echo "----------------------<br />";
//ponemos los 2 contadores a 0
$n_buffer01 = 0;
$n_buffer02 = 0;
//baciamos los arrays.
unset($buffer01);
unset($buffer02);
$n_reg02++;
}

}
?>

P.Data ya se que tengo que sustituir $contenido, $etiqueta... por expresiones boolean...

Gracias de antemano a todos.