Java Regex:为什么捕获非捕获组?

时间:2022-02-05 12:15:44

I am using this regex in Java:

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

^(Mon(?:.?|day)?)(?:[\.,])?$ (This can be tested here)

^(周一(?:。?|日)?)(?:[\。,])?$(这可以在这里测试)

I want to capture the day followed by an optional . or ,. In case of the day Monday I want to capture either Monday or Mon. However, I don't want the optional . or , to be saved in a capturing group. This only seems to work for "Monday," not for "Mon." (see link).

我想捕捉一天,然后选择。要么 ,。如果是星期一,我想捕获周一或周一。但是,我不想要可选。或者,保存在捕获组中。这似乎只适用于“星期一”,不适用于“星期一”。 (见链接)。

How can I achieve this?

我怎样才能做到这一点?

1 个解决方案

#1


2  

You may use

你可以用

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

See the regex demo

请参阅正则表达式演示

Details

  • ^ - start of string (omit if you use .matches())
  • ^ - 字符串的开头(如果使用.matches()则省略)

  • (Mon(?:day)?) - Capturing group 1:
    • Mon - a literal substring
    • Mon - 一个文字子串

    • (?:day)? - an optional day char sequence
    • (?:天)? - 可选的日期字符序列

  • (星期一(?:日)?) - 捕获组1:星期一 - 文字子串(?:日)? - 可选的日期字符序列

  • [.,]? - an optional dot or comma
  • [,]? - 可选的点或逗号

  • $ - end of string (omit if you use .matches())
  • $ - 字符串结尾(如果使用.matches()则省略)

#1


2  

You may use

你可以用

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

See the regex demo

请参阅正则表达式演示

Details

  • ^ - start of string (omit if you use .matches())
  • ^ - 字符串的开头(如果使用.matches()则省略)

  • (Mon(?:day)?) - Capturing group 1:
    • Mon - a literal substring
    • Mon - 一个文字子串

    • (?:day)? - an optional day char sequence
    • (?:天)? - 可选的日期字符序列

  • (星期一(?:日)?) - 捕获组1:星期一 - 文字子串(?:日)? - 可选的日期字符序列

  • [.,]? - an optional dot or comma
  • [,]? - 可选的点或逗号

  • $ - end of string (omit if you use .matches())
  • $ - 字符串结尾(如果使用.matches()则省略)