Test Foro de elhacker.net SMF 2.1

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 (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
Título: Re: Problema con regexp (Parseando HTML)
Publicado por: Shell Root en 6 Marzo 2013, 17:20 PM
Del tipo...,?
Código (javascript) [Seleccionar]
<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 (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
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 (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.