Problema con regexp (Parseando HTML)

Iniciado por Debci, 6 Marzo 2013, 17:02 PM

0 Miembros y 1 Visitante están viendo este tema.

Debci

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 (html4strict) [Seleccionar]

<div class="plist-manufacturer">
<a href="http:\\linkcualquiera">Nombre</a>
</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 (java) [Seleccionar]

        Pattern patronAutores = Pattern.compile("<a\\b[^>]*href=\"[^>]*>(.*?)</a>");
        Matcher encontrado = patronAutores.matcher(stringToParse);
        return encontrado.group(1);


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

Saludos

Shell Root

Del tipo...,?
Código (javascript) [Seleccionar]
<a.*?>(.*?)<\/a>
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

1mpuls0

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.
abc

Debci

#3
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

1mpuls0

abc

Slider324

#5
no es lo mejor pero puedes intentar esto:

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

despues remplazas:

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

y de esta forma te quedara nombre saludos :D

1mpuls0

#6
Ya retorné.

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

Te servirá esto?.

Código (java) [Seleccionar]

try {
           String html = "<div class=\"plist-manufacturer\"><a href=\"http://linkcualquiera\">Nombre</a></div>";

           String pattern = "href=\"http://([^\"]+).+?>(.+?)</a>";
           Matcher matcher = Pattern.compile(pattern).matcher(html);
           System.out.println("matcher-> "+html);

           while (matcher.find()) {
            System.out.println("Nombre: " + matcher.group(2) + " | Enlace: " + matcher.group(1));
           }
       } catch(Exception e) {
           e.printStackTrace();
       }


Modificado:
Así para http y https
Código (java) [Seleccionar]

String pattern = "href=\"(https?|http)://([^\"]+).+?>(.+?)</a>";


Saludos.
abc