Java正则表达式:为什么非捕获组被捕获?
Java Regex: Why is the non-capturing group captured?
我在 Java 中使用这个正则表达式:
^(Mon(?:.?|day)?)(?:[\.,])?$
(这个可以测试here)
我想捕获日期,然后是可选的 .
或 ,
。
如果是星期一,我想捕获 Monday
或 Mon
。但是,我不希望将可选的 .
或 ,
保存在捕获组中。这似乎只适用于 "Monday," 而不适用于 "Mon."(参见 link)。
我怎样才能做到这一点?
您可以使用
^(Mon(?:day)?)[.,]?$
详情
^
- 字符串开头(如果使用 .matches()
则省略)
(Mon(?:day)?)
- 捕获组 1:
Mon
- 文字子串
(?:day)?
- 一个可选的 day
字符序列
[.,]?
- 可选的点或逗号
$
- 字符串结尾(如果使用 .matches()
则省略)
我在 Java 中使用这个正则表达式:
^(Mon(?:.?|day)?)(?:[\.,])?$
(这个可以测试here)
我想捕获日期,然后是可选的 .
或 ,
。
如果是星期一,我想捕获 Monday
或 Mon
。但是,我不希望将可选的 .
或 ,
保存在捕获组中。这似乎只适用于 "Monday," 而不适用于 "Mon."(参见 link)。
我怎样才能做到这一点?
您可以使用
^(Mon(?:day)?)[.,]?$
详情
^
- 字符串开头(如果使用.matches()
则省略)(Mon(?:day)?)
- 捕获组 1:Mon
- 文字子串(?:day)?
- 一个可选的day
字符序列
[.,]?
- 可选的点或逗号$
- 字符串结尾(如果使用.matches()
则省略)