Java正则表达式 - 为什么匹配器会找到额外的字符?

时间:2014-02-12 17:26:57

标签: java regex

我正在尝试从这里提取't'和'f'标志。 所以我很惊讶在输出中看到了额外的字符。显然匹配器回溯 - 我不明白为什么。什么应该是正确的正则表达式?

    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());
    }

输出:

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

1 个答案:

答案 0 :(得分:5)

Sat中有一个t。请改为":([tf])"

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));
}