Java 正则表达式 - 为什么匹配器发现额外的字符?

标签 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

最佳答案

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

关于Java 正则表达式 - 为什么匹配器发现额外的字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21735131/

相关文章:

java - 扩展一个包含对自身列表的引用的类

java - servlet 上的 Tomcat 类加载器

javascript - 必要时用空格填充相等性/同一性 (==/===) (vim)

regex - Unicode 正则表达式匹配换行符?

java - Java读写文件时如何保持格式一致?

java - 如何确保首先调用 Spring @EventListener?

java - 我应该如何在一个文件中构建多个类和方法的结构?

regex - 什么是 "tagged DFA"?

ruby - 使用 Ruby 扫描方法,捕获组无法按预期工作

javascript - 使用一个正则表达式提取值