Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: Debci en 6 Marzo 2013, 17:02 pm



Título: Problema con regexp (Parseando HTML)
Publicado por: Debci en 6 Marzo 2013, 17:02 pm
Hola amigos :)

Os traigo una duda que tengo con la librería regexp de Java, mas en concreto, con las expresiones que esta debe buscar a partir del patrón de la cadena.

Tengo varias strings del tipo:
Código
  1. <div class="plist-manufacturer">
  2. <a href="http:\\linkcualquiera">Nombre</a>
  3. </div>

Y lo que necesito es extraer el dato que ocupa el lugar de "Nombre".
Para ello he empezado a trabajar con regexp, pero no logro dar con la expresión que me permita obtener dicho dato:
Código
  1.        Pattern patronAutores = Pattern.compile("<a\\b[^>]*href=\"[^>]*>(.*?)</a>");
  2.        Matcher encontrado = patronAutores.matcher(stringToParse);
  3.        return encontrado.group(1);
  4.  

Me devuelve que no ha sido encontrado nada...
Alguien tiene idea de cómo podría hacerlo?

Saludos


Título: Re: Problema con regexp (Parseando HTML)
Publicado por: Shell Root en 6 Marzo 2013, 17:20 pm
Del tipo...,?
Código
  1. <a.*?>(.*?)<\/a>


Título: Re: Problema con regexp (Parseando HTML)
Publicado por: 1mpuls0 en 6 Marzo 2013, 17:23 pm
Qué hay!

El contenido html lo tienes en una variable string o cómo manejas esa información (archivo de texto, etc), lo digo por las comillas dobles, recuerda que si menejas string en java tendrías que poner un carácter de escape ( \ ) y la expresión cambiaría un  poco o bien sustituir las comillas dobles por simple.

La expresión tendría que buscar entre todo el div, todo el html o solo en la etiqueta a?.

Saludos.


Título: Re: Problema con regexp (Parseando HTML)
Publicado por: Debci en 6 Marzo 2013, 17:27 pm
El código HTML que quiero parsear, esta en una String, que viene a ser lo que he especificado. Se que hay que saltar los div's (o quizás no :O) y luego leer el "<a href=....></a>" de forma generalizada, pero ya digo, no se exactamente cómo debo evitar las divs ni luego que expresión utilizar para el a href.
He probado la que deja el compañero de arriba, pero sigue sin dar resultado :O

La expresión solo busca en el div.
Con un parser html (Jsoup), ya he separado los divs de todo el código.

Saludos


Título: Re: Problema con regexp (Parseando HTML)
Publicado por: 1mpuls0 en 6 Marzo 2013, 17:41 pm
Mira aquí hay para buscar en html.

http://www.tatai.es/2009/08/22/5-expresiones-regulares-que-todo-programador-web-deberia-conocer/

Perdón te ayudaría me acaba de llegar trabajo xD

Saludos.


Título: Re: Problema con regexp (Parseando HTML)
Publicado por: Slider324 en 6 Marzo 2013, 23:51 pm
no es lo mejor pero puedes intentar esto:

Código
  1. <div class="plist-manufacturer">[\n\r\t ]+<a href=\"[a-zA-Z0-9\\\\\:]+\">[a-zA-Z0-9]+

despues remplazas:

Código
  1. <div class="plist-manufacturer">[\n\r\t ]+<a href=\"[a-zA-Z0-9\\\\\:]+\">

y de esta forma te quedara nombre saludos :D


Título: Re: Problema con regexp (Parseando HTML)
Publicado por: 1mpuls0 en 7 Marzo 2013, 01:29 am
Ya retorné.

mmm por qué tienes http:\\  :huh:

Te servirá esto?.

Código
  1. try {
  2.            String html = "<div class=\"plist-manufacturer\"><a href=\"http://linkcualquiera\">Nombre</a></div>";
  3.  
  4.            String pattern = "href=\"http://([^\"]+).+?>(.+?)</a>";
  5.            Matcher matcher = Pattern.compile(pattern).matcher(html);
  6.            System.out.println("matcher-> "+html);
  7.  
  8.            while (matcher.find()) {
  9.             System.out.println("Nombre: " + matcher.group(2) + " | Enlace: " + matcher.group(1));
  10.            }
  11.        } catch(Exception e) {
  12.            e.printStackTrace();
  13.        }
  14.  

Modificado:
Así para http y https
Código
  1. String pattern = "href=\"(https?|http)://([^\"]+).+?>(.+?)</a>";
  2.  

Saludos.