Retroceder   Foros del Web > Programación para sitios web > PHP

Respuesta
 
Herramientas Desplegado
Antiguo 27-oct-2007, 06:31   #1 (permalink)
Italico76 sólo puede mejorar
 
Avatar de Italico76
 
Fecha de Ingreso: abril-2007
Mensajes: 571
Enviar un mensaje por MSN a Italico76
Busqueda Expresiones regulares (ayudita)

AMIGOS: todo lo que trato me cuesta un parto sin experiencia y el manejo de expresiones regulares no es la excepcion

Tengo unos enlaces (cientos) que tengo que parsear y estan en este formato:

Cita:
<li><a href="http://anyveggie.blogspot.com" title="series de TV">Cualquier verdura</a> - series de TV, discos o &quot;cualquier verdura&quot;</li>
<li><a href='http://dientedelparnaso.blogspot.com/' >Diente del Parnaso</a> - un blog sobre noticias de actualidad nacional e internacional con un estilo cr&iacute;tico
<li><a href='http://www.exprofeso.com' title="periodismo">Ex profeso</a> - este es un sitio web de periodismo. el fin: elaborar un discurso crítico de calidad. el medio: la reflexión. la consigna: pensar es hacer periodismo, y hacer periodismo es hacer pensar.</li>
<li><a href="http://www.espacioblog.com/labana/blog" title="periodismo hispano">Mara Torres : página no oficial</a> - Weblog sobre la periodista y escritora Mara Torres. Para ponerse al día sobre su segundo libro, su etapa en La 2 Noticias, y leer una entrevista en exclusiva</li>
<li><a href="http://www.norbertoportugheiz.blogspot.com/" title="actualidad">Norberto Portugheiz</a> - informaciones y referencias de actualidad, respecto a personas y pueblos donde se leeran escritos mios, muchos ineditos: articulos, ensayos, poesia, narrativa, humor. </li>
<li><a href="http://www.otexto.net">Ojo al Texto</a> - bitácora del Prof. Alvaro Ramirez Ospina sobre sociedad, politica, comunicacion,... </li>
<li><a href='http://papearte.blogspot.com' >PapeArt</a> - Noticias, entretenimiento y humor</li>
<li><a href="http://quieroserjedi.blogspot.com/">Quiero ser un jedi </a>- videos, TV, música, chistes, ... </li>
Empecé a hacer algo para intentar parsearlo.... pero NI SIQUIERA pude separarlos teniendo en cuanta que estan flanqueados entre <li> y </li>

Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Parserseo de enlaces</title>
</head>

<body>
  
      
<div align="center">
<form method="post" action="anal.php">
<textarea name="entrada" cols="45" rows="5"></textarea>
      <p/>      
      <input type="submit" value="Enviar"/>
</form>
  </div>
  <?php procesa(); ?>  
  </body>
</html>

<?php

Function procesa(){
if (isset(
$_POST["entrada"])) {
$enlaces $_POST["entrada"];
  
//$urls = spliti("<li>",$enlaces);  # prueba con spliti
  
eregi("(<li>)(.*)(</li>)",$enlaces,$urls); # separa  todo lo que este ente <li> </li>  
  
Print_r ($urls);  
  Print 
count($urls);
  }
}
?>

Ideas ?
Italico76 está desconectado   Responder Citando
Antiguo 27-oct-2007, 09:13   #2 (permalink)
wigglyUtrera ha deshabilitado el karma
 
Fecha de Ingreso: enero-2007
Mensajes: 335
Re: Expresiones regulares (ayudita)

Utiliza preg_match_all en vez de eregi

Aqui tienes informacion de cómo utilziar la función:

http://es.php.net/manual/es/function.preg-match-all.php

despues haz un print_r($coincidencias) y puedes ver todo lo que ha encajado.


Saludos
wigglyUtrera está desconectado   Responder Citando
Antiguo 27-oct-2007, 11:10   #3 (permalink)
Italico76 sólo puede mejorar
 
Avatar de Italico76
 
Fecha de Ingreso: abril-2007
Mensajes: 571
Enviar un mensaje por MSN a Italico76
De acuerdo Re: Expresiones regulares (ayudita)

Hola! wigglyUrera: muchas gracias! me da no se que no poder lograrlo con POSIX y tener que recurrir a PCRE.

Es que POSIX no sirve ?:
Italico76 está desconectado   Responder Citando
Antiguo 27-oct-2007, 13:29   #4 (permalink)
Raulmmmm tiene algunos puntos positivos de karma
 
Avatar de Raulmmmm
 
Fecha de Ingreso: marzo-2007
Ubicación: En otro lugar que tú
Mensajes: 1.322
Re: Expresiones regulares (ayudita)

¿Quieres quitarle los li o qué quieres?
Aquí tienes un ejemplo:
http://raulmmmm.blogspot.com/2007/10...es-en-php.html
Raulmmmm está desconectado   Responder Citando
Antiguo 27-oct-2007, 14:28   #5 (permalink)
Italico76 sólo puede mejorar
 
Avatar de Italico76
 
Fecha de Ingreso: abril-2007
Mensajes: 571
Enviar un mensaje por MSN a Italico76
Re: Expresiones regulares (ayudita)

Raulmmmm y amigos: lo que quiero es poder extraer el ANCHOR, TITLE y lo que sigue de "DESCRIPCION" de cada link (es lo que queda entre </a> y <li> del siguiente)

Es que manualmente me tipie 600 enlaces para un directorio y ahora quiero absorverlo con PHP y meterlo en una base de datos. Razonable, verdad ?

Lo que mas quisiera en el mundo es ENTENDER porque fallo lo que he escrito y la sintaxis del ejemplo que me dio wigglyUtrera que parece muy complejo!

He visto el codigo de Raulmmmmmmmmmmm y no logro entenderlo por completo (sobre todo eso de $2) pero me pregunto si hace lo que quiero y si INDEPENDIENTEMENTE de eso....... alguien puede explicarme un poquito de como se hace porque veo codigos pero debo entenderlos

Gracias a Raul y wigglyUtrera a todos los que me ayudan :)
Italico76 está desconectado   Responder Citando
Antiguo 27-oct-2007, 17:17   #6 (permalink)
Italico76 sólo puede mejorar
 
Avatar de Italico76
 
Fecha de Ingreso: abril-2007
Mensajes: 571
Enviar un mensaje por MSN a Italico76
Triste Re: Expresiones regulares (ayudita)

A ver.... nadie me puede ayudar ????

Ya explique lo que queria hacer y si yo supiera expresiones regulares (tengo 2 dias de PHP) creo que no seria tan complicado.

Nadie ?
Italico76 está desconectado   Responder Citando
Antiguo 27-oct-2007, 21:12   #7 (permalink)
Seppo tiene algunos puntos positivos de karma
 
Avatar de Seppo
 
Fecha de Ingreso: marzo-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.282
Enviar un mensaje por MSN a Seppo
Re: Expresiones regulares (ayudita)

Las expresiones regulares no so mi fuerte, pero esto es lo que pude hacer...

Código PHP:
<?php
$text 
= <<<text
<li><a href="http://anyveggie.blogspot.com" title="series de TV">Cualquier verdura</a> - series de TV, discos o &quot;cualquier verdura&quot;</li>
<li><a href='http://dientedelparnaso.blogspot.com/' >Diente del Parnaso</a> - un blog sobre noticias de actualidad nacional e internacional con un estilo cr&iacute;tico
<li><a href='http://www.exprofeso.com' title="periodismo">Ex profeso</a> - este es un sitio web de periodismo. el fin: elaborar un discurso crítico de calidad. el medio: la reflexión. la consigna: pensar es hacer periodismo, y hacer periodismo es hacer pensar.</li>
<li><a href="http://www.espacioblog.com/labana/blog" title="periodismo hispano">Mara Torres : página no oficial</a> - Weblog sobre la periodista y escritora Mara Torres. Para ponerse al día sobre su segundo libro, su etapa en La 2 Noticias, y leer una entrevista en exclusiva</li>
<li><a href="http://www.norbertoportugheiz.blogspot.com/" title="actualidad">Norberto Portugheiz</a> - informaciones y referencias de actualidad, respecto a personas y pueblos donde se leeran escritos mios, muchos ineditos: articulos, ensayos, poesia, narrativa, humor. </li>
<li><a href="http://www.otexto.net">Ojo al Texto</a> - bitácora del Prof. Alvaro Ramirez Ospina sobre sociedad, politica, comunicacion,... </li>
<li><a href='http://papearte.blogspot.com' >PapeArt</a> - Noticias, entretenimiento y humor</li>
<li><a href="http://quieroserjedi.blogspot.com/">Quiero ser un jedi </a>- videos, TV, música, chistes, ... </li>
text;
preg_match_all('#<li><a href=["|\'](.+)["|\'](.*?)>(.+)</a>(.+)[</li>]?#i'$text$subpatterns);
foreach (
array_keys($subpatterns[0]) as $row) {
    
$title 0;
    
$data[] = array(
        
'url' => preg_replace('#[\'|"] title=[\'|"].*#i',''$subpatterns[1][$row], -1$title),
        
'title' => $title preg_replace('#.*title=[\'|"]#'''$subpatterns[1][$row]) : '',
        
'nombre' => $subpatterns[3][$row],
        
'descripcion' => trim($subpatterns[4][$row]),
    );
}
var_dump($data);
?>
Seppo está desconectado   Responder Citando
Antiguo 28-oct-2007, 03:45   #8 (permalink)
Raulmmmm tiene algunos puntos positivos de karma
 
Avatar de Raulmmmm
 
Fecha de Ingreso: marzo-2007
Ubicación: En otro lugar que tú
Mensajes: 1.322
Re: Expresiones regulares (ayudita)

Aquí lo tienes. Ten en cuenta que los href tienen que tener dos comillas, y todo tiene que estar bien cerrado. La variable $href contiene lo que hay dentro de <a href="esto">, la variable $textodentroa contiene lo que hay dentro del a, es decir <a>esto</a>, la variable $textodespuesa contiene lo que hay entre </a> y </li>, y la variable $title contiene lo que hay después del href del a, es decir <a href="" esto></a>.
Código PHP:
<?php
$texto 
'<li><a href="http://anyveggie.blogspot.com" title="series de TV">Cualquier verdura</a> - series de TV, discos o &quot;cualquier verdura&quot;</li>
<li><a href="http://dientedelparnaso.blogspot.com/" >Diente del Parnaso</a> - un blog sobre noticias de actualidad nacional e internacional con un estilo cr&iacute;tico</li>
<li><a href="http://www.exprofeso.com" title="periodismo">Ex profeso</a> - este es un sitio web de periodismo.z</li>
<li><a href="http://www.espacioblog.com/labana/blog" title="periodismo hispano">Mara Torres : página no oficial</a> - Weblog sobre la periodista y escritora Mara Torres. Para ponerse al día sobre su segundo libro, su etapa en La 2 Noticias, y leer una entrevista en exclusiva</li>
<li><a href="http://www.norbertoportugheiz.blogspot.com/" title="actualidad">Norberto Portugheiz</a> - informaciones y referencias de actualidad, respecto a personas y pueblos donde se leeran escritos mios, muchos ineditos: articulos, ensayos, poesia, narrativa, humor. </li>
<li><a href="http://www.otexto.net">Ojo al Texto</a> - bitácora del Prof. Alvaro Ramirez Ospina sobre sociedad, politica, comunicacion,... </li>
<li><a href="http://papearte.blogspot.com" >PapeArt</a> - Noticias, entretenimiento y humor</li>
<li><a href="http://quieroserjedi.blogspot.com/">Quiero ser un jedi </a>a</li>'
;
$a = array("/\<li\>\<a href=\"(.*?)\"(.*?)\>(.*?)\<\/a\>(.*?)\<\/li\>/is");
$b = array("$1"."<br />");
$href preg_replace($a$b$texto);
echo 
$href;
$c = array("$3"."<br />");
$textodentroa preg_replace($a$c$texto);
echo 
$textodentroa;
$d = array("$4"."<br />");
$textodespuesa preg_replace($a$d$texto);
echo 
$textodespuesa;
$e = array("$2"."<br />");
$title preg_replace($a$e$texto);
echo 
$title;
?>
Raulmmmm está desconectado   Responder Citando
Antiguo 28-oct-2007, 04:56   #9 (permalink)
Italico76 sólo puede mejorar
 
Avatar de Italico76
 
Fecha de Ingreso: abril-2007
Mensajes: 571
Enviar un mensaje por MSN a Italico76
De acuerdo Re: Expresiones regulares (ayudita)

Seppo y Raulmmmm: sin palabras! muchiiiiiiiiiisimas gracias!!!!!!!!!!!!!!
Italico76 está desconectado   Responder Citando
Antiguo 29-oct-2007, 10:50   #10 (permalink)
Italico76 sólo puede mejorar
 
Avatar de Italico76
 
Fecha de Ingreso: abril-2007
Mensajes: 571
Enviar un mensaje por MSN a Italico76
Alegría Re: Expresiones regulares (ayudita)

Hola! estube estudiando los codigos de Seppo y Raulmmmm y me quedaron algunas cosas en el tintero (que no entendi del todo)

preg_match_all('#<li><a href=["|\'](.+)["|\'](.*?)>(.+)</a>(.+)[</li>]?#i', $text, $subpatterns);
foreach (array_keys($subpatterns[0]) as $row)

Ahi no entiendo lo que esta en negrita del codigo e igualmente con el de Raulmmm:

$a = array("/\<li\>\<a href=\"(.*?)\"(.*?)\>(.*?)\<\/a\>(.*?)\<\/li\>/is");

Para que ese /is del final ? me pueden ayudar ?
Italico76 está desconectado   Responder Citando
Antiguo 29-oct-2007, 11:00   #11 (permalink)
Seppo tiene algunos puntos positivos de karma
 
Avatar de Seppo
 
Fecha de Ingreso: marzo-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.282
Enviar un mensaje por MSN a Seppo
Re: Expresiones regulares (ayudita)

Las / que usó raulmmm, o los # que usé yo están para el mismo motivo, que es delimitar la expresión regular. Podés usar cualquier caracter. El más normal es /, peor yo usé # porque es un caracter que seguramente no aparezca en la expresión, mientras que / sí.

El caracter "i" despues del delimitador del patron indica una busqueda insensible a mayusculas/minusculas.

Para la "s": Si se define éste modificador, un meta-caracter de punto en el patrón coincidirá con todos los caracteres, incluyendo el de nueva línea. Sin él, los saltos de línea son excluídos. Este modificador es equivalente a /s en Perl. Una clase negativa como [^a] siempre coincide con un caracter de nueva línea, independientemente del uso de este modificador.

Los modificadores los podés ver acá
Seppo está desconectado   Responder Citando
Antiguo 29-oct-2007, 11:20   #12 (permalink)
Italico76 sólo puede mejorar
 
Avatar de Italico76
 
Fecha de Ingreso: abril-2007
Mensajes: 571
Enviar un mensaje por MSN a Italico76
De acuerdo Re: Expresiones regulares (ayudita)

Seppo: muchisimas gracias!!! se nota que vos y Raulmmmm saben mucho

Como me gustan mucho los blogs de Uds. los he incluido en mi paginita web para acordarme de visitarles

Con su ayuda voy a hacer algo mucho mejor
// gracias de nuevo!!!!!!!!

Última edición por Italico76; 29-oct-2007 a las 11:40.
Italico76 está desconectado   Responder Citando
Antiguo 31-oct-2007, 14:09   #13 (permalink)
Italico76 sólo puede mejorar
 
Avatar de Italico76
 
Fecha de Ingreso: abril-2007
Mensajes: 571
Enviar un mensaje por MSN a Italico76
De acuerdo Re: Expresiones regulares (ayudita)

Voy a completar el codigo de Raulmmm con lo que aprendi

Código PHP:
<?php

$texto 
'<li><a href="http://anyveggie.blogspot.com" title ="series de TV">Cualquier verdura</a> - series de TV, discos o &quot;cualquier verdura&quot;</li>
<li><a href="http://dientedelparnaso.blogspot.com/" >Diente del Parnaso</a> - un blog sobre noticias de actualidad nacional e internacional con un estilo cr&iacute;tico</li>
<li><a href="http://www.exprofeso.com" title="periodismo">Ex profeso</a> - este es un sitio web de periodismo.z</li>
<li><a href="http://www.espacioblog.com/labana/blog" title="periodismo hispano">Mara Torres : página no oficial</a> - Weblog sobre la periodista y escritora Mara Torres. Para ponerse al día sobre su segundo libro, su etapa en La 2 Noticias, y leer una entrevista en exclusiva</li>
<li><a href="http://www.norbertoportugheiz.blogspot.com/" title="actualidad">Norberto Portugheiz</a> - informaciones y referencias de actualidad, respecto a personas y pueblos donde se leeran escritos mios, muchos ineditos: articulos, ensayos, poesia, narrativa, humor. </li>
<li><a href="http://www.otexto.net">Ojo al Texto</a> - bitácora del Prof. Alvaro Ramirez Ospina sobre sociedad, politica, comunicacion,... </li>
<li><a href="http://papearte.blogspot.com" >PapeArt</a> - Noticias, entretenimiento y humor</li>
<li><a href="http://quieroserjedi.blogspot.com/">Quiero ser un jedi </a>a</li>'
;

$texto =str_replace("\"" "'" ,$texto);  //reemplazo comillas dobles [ chr(34) ] por simples
 
 
$a = array("/\<li\>\<a href=\'(.*?)\'(.*?)\>(.*?)\<\/a\>(.*?)\<\/li\>/is");

// HREF
$b = array("$1"."<br />");  // los <br/> son esteticos
$href preg_replace($a$b$texto);
//echo $href;

//ANCHOR
$c = array("$3"."<br />");
$textodentroa preg_replace($a$c$texto);
//echo $textodentroa;

//DESCRIPCION ENTRE </a> y <li>
$d = array("$4"."<br />");
$textodespuesa preg_replace($a$d$texto);
//echo $textodespuesa;

//TITLE="......"
$e = array("$2"."<br />");
$title preg_replace($a$e$texto);

//TITLE ( limpio)
$a=array("#title[[:blank:]]*?=[[:blank:]]*?\'(.*?)\'#");
$b = array("$1");
$title_solved preg_replace($a$b$title);
echo 
$title_solved;
  

?>
La parte nueva es

Código PHP:
//TITLE ( limpio)
$a=array("#title[[:blank:]]*?=[[:blank:]]*?\'(.*?)\'#");
$b = array("$1");
$title_solved preg_replace($a$b$title);
echo 
$title_solved
con eso quito lo que molesta y limpio el TITLE

Última edición por Italico76; 31-oct-2007 a las 14:37.
Italico76 está desconectado   Responder Citando
Antiguo 31-oct-2007, 14:39   #14 (permalink)
Italico76 sólo puede mejorar
 
Avatar de Italico76
 
Fecha de Ingreso: abril-2007
Mensajes: 571
Enviar un mensaje por MSN a Italico76
Cool Al pastear debo usar stripslashes() y queda OK

El codigo original (donde los enlaces son PASTEADOS desde una FORM) funciona SOLO si utilizo la funcion stripslashes () para pre-procesar la entrada y eliminar los \'

Aqui la VERSION DEFINITIVA:


Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Parserseo de enlaces</title>
</head>

<body>
  
      
<div align="center">
<form method="post" action="anal-def.php">
<textarea name="entrada" cols="45" rows="5"></textarea>
      <p/>      
      <input type="submit" value="Enviar"/>
</form>
  </div>
  <?php procesa(); ?>  
  </body>
</html>

<?php

Function procesa(){

if (isset(
$_POST["entrada"])) {

$enlaces $_POST["entrada"];  // tomo de la veriable "entrada" del Form
$enlaces stripslashes ($enlaces); // elimino \'    <<<<<
$texto =str_replace("\"" "'" ,$enlaces);  //reemplazo comillas dobles [ chr(34) ] por simples

$a = array("/\<li\>\<a href=\'(.*?)\'(.*?)\>(.*?)\<\/a\>(.*?)\<\/li\>/is");

// HREF
$b = array("$1"."<br />");  // los <br/> son esteticos
$href preg_replace($a$b$texto);
//echo $href;

//ANCHOR
$c = array("$3"."<br />");
$textodentroa preg_replace($a$c$texto);
//echo $textodentroa;

//DESCRIPCION ENTRE </a> y <li>
$d = array("$4"."<br />");
$textodespuesa preg_replace($a$d$texto);
//echo $textodespuesa;

//TITLE="......"
$e = array("$2"."<br />");
$title preg_replace($a$e$texto);

//TITLE ( limpio)
$a=array("#title[[:blank:]]*?=[[:blank:]]*?\'(.*?)\'#");
$b = array("$1");
$title_solved preg_replace($a$b$title);
echo 
$title_solved;

  
  
//Print_r ($urls);  
  //Print count($urls);
 
}
}
?>

Última edición por Italico76; 31-oct-2007 a las 14:52.
Italico76 está desconectado   Responder Citando
Antiguo 01-nov-2007, 04:08   #15 (permalink)
Raulmmmm tiene algunos puntos positivos de karma
 
Avatar de Raulmmmm
 
Fecha de Ingreso: marzo-2007
Ubicación: En otro lugar que tú
Mensajes: 1.322
Re: Expresiones regulares (ayudita)

¡Me alegro de que te saliera bien! Todos hemos tenido alguna vez problemas con las expresiones regulares, incluso yo.
Raulmmmm está desconectado   Responder Citando
Respuesta
No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 04:30.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3