2011-01-07 23 views
6

Estoy tratando de obtener un texto dentro de cierta etiqueta. Así que si tengo:Java Regex para obtener el texto del anclaje HTML (<a> ...</a>) tags

<a href="http://something.com">Found<a/> 

Quiero ser capaz de recuperar el texto Found.

Estoy tratando de hacerlo usando expresiones regulares. Puedo hacerlo si el <a href="http://something.com> se mantiene igual pero no es así.

Hasta ahora tengo esto:

Pattern titleFinder = Pattern.compile(".*[a-zA-Z0-9 ]* ([a-zA-Z0-9 ]*)</a>.*"); 

creo que las dos últimas partes - el ([a-zA-Z0-9 ]*)</a>.* - están bien, pero no sé qué hacer para la primera parte.

+8

[No analizar HTML con expresiones regulares] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454). Use un analizador XML/HTML adecuado ... – ircmaxell

+0

gracias por la respuesta, miro en ello = D pero no lo estoy haciendo para muchas etiquetas html, solo para esta etiqueta, que aparece 15 veces ... sigue siendo malo ? – BeginnerPro

+0

Las expresiones regulares de Java no son lo suficientemente potentes como para analizar HTML; otros idiomas, sin embargo, son. Por qué alguien en su sano juicio usaría Java para el trabajo de expresiones regulares está completamente más allá de mí. – tchrist

Respuesta

6

Como decían, no utilizan expresiones regulares para analizar HTML. Si conoce las deficiencias, puede salirse con la suya, sin embargo. Pruebe

Pattern titleFinder = Pattern.compile("<a[^>]*>(.*?)</a>", Pattern.DOTALL | Pattern.CASE_INSENSITIVE); 
Matcher regexMatcher = titleFinder.matcher(subjectString); 
while (regexMatcher.find()) { 
    // matched text: regexMatcher.group(1) 
} 

iterará sobre todas las coincidencias de una cadena.

No manejará las etiquetas anidadas <a> e ignorará todos los atributos dentro de la etiqueta.

Cuestiones relacionadas