likejudo
likejudo

Reputation: 3726

Java regex - why did the Matcher find extra characters?

I was experimenting trying to extract the 't' and 'f' flags from here. So I was surprised to see extra characters in the output. Apparently the matcher backtracked - I dont understand why. What should be the correct regex?

    System.out.println("searching...");
    // "Sun:\\s Mon:\\s Tue:\\s Wed:\\s Thu:\\s Fri:\\s Sat:\\s "
    Pattern p = Pattern.compile("[t|f]");
    Matcher m = p.matcher("Sun:t Mon:f Tue:t Wed:t Thu:f Fri:t Sat:f ");
    while (m.find()) {
      System.out.println(m.group());
    }

Output:

searching...
t
f
t
t
f
t
t
f

Upvotes: 0

Views: 61

Answers (1)

Peter Lawrey
Peter Lawrey

Reputation: 533500

Sat has a t in it. Try ":([tf])" instead.

Pattern p = Pattern.compile(":([tf])");
Matcher m = p.matcher("Sun:t Mon:f Tue:t Wed:t Thu:f Fri:t Sat:f ");
while (m.find()) {
    System.out.println(m.group(1));
}

Upvotes: 5

Related Questions