Ver Mensaje Individual
  #9 (permalink)  
Antiguo 06/03/2014, 06:45
Avatar de enlinea777
enlinea777
 
Fecha de Ingreso: mayo-2008
Ubicación: frente al pc
Mensajes: 1.830
Antigüedad: 16 años
Puntos: 127
Respuesta: Explorar cadena PHP

Cita:
Iniciado por hhs Ver Mensaje
Es normal que no puedas, las expresiones regulares por si solas no pueden hacer lo que esperas.
Necesitas un parser para lo que deseas hacer, te dejo algunas alternativas:
http://www.php.net/manual/en/class.domdocument.php
https://code.google.com/p/ganon/
http://sourceforge.net/projects/simplehtmldom/files/
Estimado hhs los parser's se balen de codigos con expreciones regulares para hacer su trabajo si no lo sabias, claro esta que para el usuario promedio le es dificil entender las expreciones regulares por eso se inventan ese tipo de cosas, y bueno para proyectos grandes es mas facil el parser que crear una exprecion por cada necesidad.

Para los que lleguen despues, les dejo el codigo explicado

Código PHP:
<?php
$Texto
="<h1>Energía solar termica</h1>
<p>La energía solar térmica (o energía termosolar) consiste en el aprovechamiento de la energía del Sol para producir calor que puede aprovecharse para cocinar alimentos o para la producción de agua caliente destinada.....</p>
<h2>Energía solar térmica de baja temperatura</h2>
<p>Una instalación solar térmica de baja temperatura está formada por captadores solares, un circuito primario y secundario, intercambiador de calor....</p>
<h2>Energía solar térmica de media temperatura</h2>
<p>Las instalaciones de temperatura media pueden usar varias diseños, los diseños más comunes son: glicol a presión, drenaje trasero, sistemas de lote y sistemas....</p>
<h1>Energía solar fotovoltaica</h1>
<p>La energía solar fotovoltaica consiste en la obtención de electricidad24 obtenida directamente a partir de la radiación solar mediante....</p>
<h2>Paneles solares fotovoltaicos</h2>
<p>Un panel fotovoltaico consiste en una asociación de células, encapsulada en dos capas de EVA (etileno-vinilo-acetato), entre una lámina frontal de vidrio y una capa....</p>"
;

function 
extraer_si_hay($Texto){
  
$expresion="/\<h.\>(.*)\<\/h.\>/"// esto quire decir lo que este entre <h*> y </h*> 
  
preg_match_all($expresion,$Texto,$considencias); // hace las comparaciones
  
$text=$considencias[1]; //esto se convierte en un array con las considencias
 
if(trim($text[0])!=""){ // consulto la primera y en este caso la unica concidencia
  
return array(true,$considencias); // devuelvo un areglo con valor 0=true y 1=todala info extraida por las considencias de las etiquetas header
  
}else{
    return array(
false);// si no saco nada devuelvo falso
  
}
}
$textos=explode("\n",$Texto); //separo por lineas en este caso funciona por que las etiquetas <h1>,<h2>,<h3>, etc... son de una sola linea

foreach( $textos as $linea){ // recorro linea a linea
  
$resultado=extraer_si_hay($linea); // ejecuto la funcion anterior mandando la linea
  
if($resultado[0]){ //reviso el resultado del areglo en el valor 0 que debe ser verdadero o falso
    
$titulos[]=array("typo"=>substr($resultado[1][0][0],1,2),"texto"=>$resultado[1][1][0]);// Genero un nuevo arreglo extrayendo el tipo e etiqueta h1,h2,h3, etc. y e texto de ella.
  
}
}
print_r($titulos); //Imprimo los resultados
?>