Java正则表达式:为什么非捕获组被捕获?

Java Regex: Why is the non-capturing group captured?

我在 Java 中使用这个正则表达式:

^(Mon(?:.?|day)?)(?:[\.,])?$(这个可以测试here

我想捕获日期,然后是可选的 .,。 如果是星期一,我想捕获 MondayMon。但是,我不希望将可选的 ., 保存在捕获组中。这似乎只适用于 "Monday," 而不适用于 "Mon."(参见 link)。

我怎样才能做到这一点?

您可以使用

^(Mon(?:day)?)[.,]?$

regex demo

详情

  • ^ - 字符串开头(如果使用 .matches() 则省略)
  • (Mon(?:day)?) - 捕获组 1:
    • Mon - 文字子串
    • (?:day)? - 一个可选的 day 字符序列
  • [.,]? - 可选的点或逗号
  • $ - 字符串结尾(如果使用 .matches() 则省略)