Ich versuche schon seit mehreren Tagen mit Pattern und Matcher klarzukommen, schaff es aber einfach nicht.
Nach 2 Tagen erfolglosem Googeln habe ich beschlossen, ein Java Forum aufzusuchen und bin schließlich hier gelandet.
Nun zu meinem Problem:
Ich habe eine beliebige Zeichenkette, die sich immer zwischen zwei gleichen Zeichenketten befindet und mehrmals im gesamten String vorkommt.
Nun will ich immer die Zeichenkette die zischen den anderen beiden liegt ausgeben.
So weit so gut, wo liegt das Problem?
Probiert habe ich es indem ich eine ganze Datei eingelesen habe und sie dann gepattert habe.
Nun gibt er mir allerdings ein falsches Ergebnis aus.
Mein Beispiel:
Java:
importjava.util.regex.Matcher;importjava.util.regex.Pattern;importjava.io.IOException;publicclassIndexCreator{publicstaticvoidmain(String[] args)throwsIOException{Pattern pattern =Pattern.compile("<p class=\"question\" style=\"margin:0cm;margin-bottom:.0001pt\">(.*)</p>");String test ="<p class=\"question\" style=\"margin:0cm;margin-bottom:.0001pt\">Q:"+" "+"Ich bin die Frage Nummer 1."+" "+"<p class=\"question\" style=\"margin:0cm;margin-bottom:.0001pt\">Q:"+" "+"Ich bin die Frage Nummer 2.</p>";Matcher matcher = pattern.matcher(test);while(matcher.find()){System.out.println(matcher.group(1));}}}
Die Ausgabe:
Code:
Q: Ich bin die Frage Nummer 1. <p class=\"question\" style=\"margin:0cm;margin-bottom:.0001pt\">Q: Ich bin die Frage Nummer 2.
<pclass="question"style="margin:0cm;margin-bottom:.0001pt">Q: Ich bin die Frage Nummer 1.
<pclass="question"style="margin:0cm;margin-bottom:.0001pt">Q: Ich bin die Frage Nummer 2.</p>
Fällt dir was auf? Bei der ersten Frage fehlt das schließende [c]</p>[/c].
Daher interpretiert der Matcher das erste [c]<p...[/c] als Start des Patterns, was mit [c]</p>[/c] ganz am Ende erst wieder beendet wird. Also alles korrekt gematcht, lediglich deine Eingabe ist syntaktisch falsch.
Auch wenn ich dort ein </p> einfüge passiert haargenau das selbe wie vorher.
Java:
importjava.util.regex.Matcher;importjava.util.regex.Pattern;importjava.io.IOException;publicclassIndexCreator{publicstaticvoidmain(String[] args)throwsIOException{Pattern pattern =Pattern.compile("<p class=\"question\" style=\"margin:0cm;margin-bottom:.0001pt\">(.*)</p>");String test ="<p class=\"question\" style=\"margin:0cm;margin-bottom:.0001pt\">Q:"+" "+"Ich bin die Frage Nummer 1.</p>"+" "+"<p class=\"question\" style=\"margin:0cm;margin-bottom:.0001pt\">Q:"+" "+"Ich bin die Frage Nummer 2.</p>";Matcher matcher = pattern.matcher(test);while(matcher.find()){System.out.println(matcher.group(1));}}}
Danke vielmals, dass hatte ich komplett übersehen!
Es funktioniert tadellos!
Java:
importjava.util.regex.Matcher;importjava.util.regex.Pattern;importjava.io.IOException;publicclassIndexCreator{publicstaticvoidmain(String[] args)throwsIOException{Pattern pattern =Pattern.compile("<p class=\"question\" style=\"margin:0cm;margin-bottom:.0001pt\">(.*?)</p>");String test ="<p class=\"question\" style=\"margin:0cm;margin-bottom:.0001pt\">Q:"+" "+"Ich bin die Frage Nummer 1.</p>"+" "+"<p class=\"question\" style=\"margin:0cm;margin-bottom:.0001pt\">Q:"+" "+"Ich bin die Frage Nummer 2.</p>";Matcher matcher = pattern.matcher(test);while(matcher.find()){System.out.println(matcher.group(1));}}}
MfG,
Nestos.
PS: Ich werde das Forum weiterempfehlen, so schnelle und vorallem brauchbare Antworten bekommt man selten wo.