首页 > 解决方案 > Java Regex:为什么非捕获组被捕获?

问题描述

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

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

我想在可选的.or后面捕获一天,。在星期一的情况下,我想捕获MondayMon。但是,我不希望将可选的.,保存在捕获组中。这似乎只适用于“星期一”,而不适用于“星期一”。(见链接)。

我怎样才能做到这一点?

标签: javaregexcapturing-group

解决方案


您可以使用

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

查看正则表达式演示

细节

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

推荐阅读