2011-01-07 7 views
6

Ich versuche, einen Text innerhalb eines bestimmten Tags zu bekommen. Also, wenn ich habe:Java Regex, um den Text von HTML-Anker (<a> ...</a>) Tags

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

Ich möchte den Found Text abrufen können.

Ich versuche es mit Regex zu tun. Ich kann es tun, wenn die <a href="http://something.com> gleich bleibt, aber es nicht tut.

Bisher habe ich dies:

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

Ich denke, die letzten beiden Teile - die ([a-zA-Z0-9 ]*)</a>.* - sind in Ordnung, aber ich weiß nicht, was für den ersten Teil zu tun.

+8

[HTML nicht mit Regex analysieren] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454). Verwenden Sie einen geeigneten XML/HTML-Parser ... – ircmaxell

+0

danke für die Antwort, ich sehe es ein = D aber ich mache es nicht für viele HTML-Tags, es ist nur für dieses eine Tag, das 15 Mal auftritt ... ist das immer noch schlecht ? – BeginnerPro

+0

Java Regexes sind nicht stark genug, um HTML zu analysieren; andere Sprachen sind jedoch. Warum jemand, der bei klarem Verstand Java für die Regex-Arbeit verwendet, ist völlig jenseits von mir. – tchrist

Antwort

6

Wie sie sagte, nicht Regex verwenden, um HTML zu analysieren. Wenn Sie sich der Mängel bewusst sind, könnten Sie damit durchkommen. Versuchen Sie

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

wird über alle Übereinstimmungen in einer Zeichenfolge iterieren.

Es wird nicht verschachtelte <a> Tags behandelt und ignoriert alle Attribute innerhalb des Tags.