【问题标题】:Java Regex: Why is the non-capturing group captured?Java Regex:为什么非捕获组被捕获?
【发布时间】:2019-03-08 16:31:19
【问题描述】:

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

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

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

我怎样才能做到这一点?

【问题讨论】:

  • 您要捕获Mon,吗?
  • 我怀疑你只需要^(Mon(?:day)?)[.,]?$
  • @Pshemo 不,我只想捕获 Mon 不带逗号
  • 所以Mon 应该被捕获,即使它后面有逗号。在这种情况下,Wiktor 的答案似乎正是您要寻找的。​​span>

标签: java regex capturing-group


【解决方案1】:

你可以使用

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

regex demo

详情

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-04
    • 2013-01-25
    • 2015-06-07
    • 2019-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    相关资源
    最近更新 更多