ERLEDIGT
NEIN
NEIN
ANTWORTEN
3
3
ZUGRIFFE
201
201
EMPFEHLEN
-
Hallo,
Ich habe ein HTML Quellcode mit einem select-Tag. Darin sind mehrere option-Tags, und hier muss ich den letzten Tag auswählen und den Wert rausparsen.
Aber mein Regex will einfach nicht klappen
Das ist ein Auschnitt aus dem HTML:
Und ich brauche draus nun den Wert des letzten option-Tags, also 24!HTML-Code:<select name="offlinePeriod" class="listbox"> <option value="0" selected="selected">01-Aug-2009 till 31-Aug-2009</option> <option value="1">01-Sep-2009 till 30-Sep-2009</option> <option value="2">01-Oct-2009 till 31-Oct-2009</option> <option value="3">01-Nov-2009 till 30-Nov-2009</option> <option value="4">01-Dec-2009 till 31-Dec-2009</option> <option value="5">01-Jan-2010 till 31-Jan-2010</option> <option value="6">01-Feb-2010 till 28-Feb-2010</option> <option value="7">01-Mar-2010 till 31-Mar-2010</option> <option value="8">01-Apr-2010 till 30-Apr-2010</option> <option value="9">01-May-2010 till 31-May-2010</option> <option value="10">01-Jun-2010 till 30-Jun-2010</option> <option value="11">01-Jul-2010 till 31-Jul-2010</option> <option value="12">01-Aug-2010 till 31-Aug-2010</option> <option value="13">01-Sep-2010 till 30-Sep-2010</option> <option value="14">01-Oct-2010 till 31-Oct-2010</option> <option value="15">01-Nov-2010 till 30-Nov-2010</option> <option value="16">01-Dec-2010 till 31-Dec-2010</option> <option value="17">01-Jan-2011 till 31-Jan-2011</option> <option value="18">01-Feb-2011 till 28-Feb-2011</option> <option value="19">01-Mar-2011 till 31-Mar-2011</option> <option value="20">01-Apr-2011 till 30-Apr-2011</option> <option value="21">01-May-2011 till 31-May-2011</option> <option value="22">01-Jun-2011 till 30-Jun-2011</option> <option value="23">01-Jul-2011 till 31-Jul-2011</option> <option value="24">01-Aug-2011 till 31-Aug-2011</option> </select>
So sieht mein Regex aus:
Code :1
<option value=\"([0-9]{2})\">.*?<\\/option>\\s*<\\/select>
Aber das wird nichts bei mir. Kann mir jemand beim Regex aushelfen, oder kennt jemand eine Java-Libary für den Umgang mit HTML?Wenn dir mein Beitrag hilfreich war darfst du gerne Danke klicken! :)
watch my blog @ websocialist.blogspot.com
-
Code java:
1 2 3 4 5 6
Pattern p = Pattern.compile("<option value=\"([0-9]+)\">.*?</option>\\s*</select>", Pattern.MULTILINE); Matcher m = p.matcher(html); if(m.find()) { System.out.println(m.group(1)); }
Edit: Jetzt sehe ich erst, dass dein Ausdruck identisch ist :-D
-
Ich hab's zwar jetzt geschafft, das ist aber nicht die Musterlösung die ich wollte.
Würde gerne eine elegantere Lösung haben, falls das jemand schaftt würde ich mich sehr freuen!
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
// Zuerst nach dem select-Block suchen String periodRegex = "<select name=\"offlinePeriod\" class=\"listbox\">(.*?)<\\/select>"; Pattern p = Pattern.compile(periodRegex, Pattern.CASE_INSENSITIVE | Pattern.DOTALL); Matcher m = p.matcher(content); if (m.find()) { String periodString = m.group(1).trim(); // Danach nach dem letzten option-Tag suchen String optionRegex = "<option[^>]+value=\"([0-9]+)\"[^>]+>([^>]+)<\\/option>$"; p = Pattern.compile(optionRegex, Pattern.CASE_INSENSITIVE | Pattern.DOTALL); m = p.matcher(periodString); if(m.find()) { String period = m.group(1); return; } }
Wenn dir mein Beitrag hilfreich war darfst du gerne Danke klicken! :)
watch my blog @ websocialist.blogspot.com
-
29.09.11 18:05 #4
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo,
wie wärs denn mit XPath anstatt eines Regex?
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
package de.tutorials.training; import java.io.InputStream; import javax.xml.xpath.XPathExpressionException; import javax.xml.xpath.XPathFactory; import org.xml.sax.InputSource; public class HtmlDomElementExtraction { public static void main(String[] args) throws Exception { String xpath = "(//select[@name='offlinePeriod' and @class='listbox']/option)[last()]/text()"; InputStream htmlResource = HtmlDomElementExtraction.class.getClassLoader().getResourceAsStream("test.html"); String result = evaluateXPath(xpath, htmlResource); System.out.println("Result: " + result); } private static String evaluateXPath(String xpath, InputStream htmlResource) throws XPathExpressionException { return XPathFactory .newInstance() .newXPath() .compile(xpath) .evaluate( new InputSource(htmlResource)); } }
Well-formed (x)HTML kann man auch mit den normalen XML Java Boardmitteln (DOM/SAX/StAX Parser) verarbeiten.
Für nicht well-formed HTML kannst du auch javax.swing.text.html.HTMLDocument oder (besser) eine der hier gelisteten libs verwenden:
http://java-source.net/open-source/html-parsers
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
Ähnliche Themen
-
Regulärer Ausdruck für Verwendung in HTML
Von Foaly-I im Forum PHPAntworten: 2Letzter Beitrag: 19.01.08, 19:21 -
Regulärer Ausdruck
Von Sebastian29 im Forum JavaAntworten: 4Letzter Beitrag: 23.08.07, 13:08 -
Regulärer Ausdruck für HTML:Bitte um Hilfe!!
Von NanoNuna im Forum PHPAntworten: 7Letzter Beitrag: 16.05.07, 11:06 -
Regulärer Ausdruck
Von Centin im Forum Coders TalkAntworten: 2Letzter Beitrag: 06.11.06, 19:24 -
Regulärer Ausdruck
Von Benzol im Forum .NET ArchivAntworten: 3Letzter Beitrag: 28.01.05, 11:58





Zitieren


Login





