Seite 1 von 1

Exception bei Regex-Matching

Verfasst: Mo Feb 11, 2013 2:09 am
von nufan
Eine Frage aus der Kategorie "WTF" ^^
Kann mir jemand die Ausgabe des folgenden Codes erklären?

Code: Alles auswählen

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class PatternTest {

    public static void main(String[] args) {
        String[] text = {"[proggen.org][0] Xin", "[proggen.org][1] dani93"};
        Pattern pattern = Pattern.compile("\\[proggen.org\\]\\[(\\d)\\].+");
        Matcher matcher = pattern.matcher(text[0]);
        System.out.println(matcher.matches());
        System.out.println(matcher.groupCount());
        System.out.println(matcher.group(1));
        System.out.println(Pattern.compile("\\[proggen.org\\]\\[(\\d)\\].+").matcher(text[0]).matches());
        System.out.println(Pattern.compile("\\[proggen.org\\]\\[(\\d)\\].+").matcher(text[0]).groupCount());
        System.out.println(Pattern.compile("\\[proggen.org\\]\\[(\\d)\\].+").matcher(text[0]).group(1));
    }

}
Ausgabe:
true
1
0
true
1
Exception in thread "main" java.lang.IllegalStateException: No match found
at java.util.regex.Matcher.group(Matcher.java:485)
at PatternTest.main(PatternTest.java:15)
Ich versuche einfach die Ziffer in den zweiten eckigen Klammern zu parsen. Doch warum funktioniert der erste Teil, aber der zweite nicht?! Die machen doch genau das gleiche, oder überseh ich was?

EDIT:
Bäh... Erst wenn die Methode matches() ausgeführt wird, landen die Ergebnisse im Objekt. Deswegen geht die zweite Schreibweise nicht.

Re: Exception bei Regex-Matching

Verfasst: So Mär 24, 2013 5:58 pm
von wurfkeks
Die Lösung ist ganz einfach: Bei der zweiten Variante erzeugst du mit jedem println()-Aufruf alle Objekte neu. In der Doku steht zu der group(int)-Methode:
Returns the input subsequence captured by the given group during the previous match operation.
Da aber wie gesagt das Objekt völlig neu erzeugt wird, hat auf diesem vorher kein Aufruf der "match operation" stattgefunden. Somit ist die Exception erklärt, welche ja besagt, dass es keinen Match gibt.

Re: Exception bei Regex-Matching

Verfasst: So Mär 24, 2013 6:04 pm
von nufan
Danke, aber wie du am Ende meines ersten Beitrags sehen kannst bin ich da schon selbst drauf gekommen ^^

Re: Exception bei Regex-Matching

Verfasst: Do Mär 28, 2013 6:05 pm
von Simon
Interessant wären noch die Zeilennummern des Beispiels, damit man erkennen kann, wo die Exception nun genau geflogen ist :mrgreen:

Re: Exception bei Regex-Matching

Verfasst: Do Mär 28, 2013 6:11 pm
von nufan
Simon hat geschrieben:Interessant wären noch die Zeilennummern des Beispiels, damit man erkennen kann, wo die Exception nun genau geflogen ist :mrgreen:
Ist (wie man an der Ausgabe erkennen kann) die letzte Zeile in main :)