任何人都可以帮助为这个逻辑组成正则表达式吗?
MM/DD/YYYY hh:mm AM/PM
MM/DD/YYYY hh AM/PM
MM/DD/YYYY
MM/YYYY
YYYY
[日期模板]
M/D/YY
M/YY
M/YYYY
M/D/YYYY
MMM YY
MMM YYYY
MMMM YY
MMMM YYYY
YY/M
YY-M
YY.M
YYYY/M
YYYY-M
YYYY.M
YYYY
YYYY/M/D
YYYY-M-D
YYYY.M.D
M-D-YY
M-YY
M-YYYY
M-D-YYYY
M.D.YY
M.YY
M.YYYY
M.D.YYYY
MMM D[,] YY
MMM D[,] YYYY
MMMM D[,] YY
MMMM D[,] YYYY
D MMM[,] YY
D MMM[,] YYYY
D MMMM[,] YY
D MMMM[,] YYYY
[时间模板]
hh:mm AM (or PM or A or P)
hh AM (or PM or A or P)
HH:mm
YY two-digit year (00 => 2000, 10 => 2010)
答案 0 :(得分:3)
给你一些提示: 您可以通过不同的方式指定月份:M,MM,MMMM
M表示它是一个数字,所以你可以像[0-9]
一样编写它(有更紧凑的方法,但我认为这需要的解释最少)。
MM表示你可以有另一个数字,但这个数字显然只有1
,因为12
是最高数字。
所以我们改变了表达式:1?[0-9]
。这意味着一个是可选的。
这是对的吗?不,因为它会例如接受0
作为有效月份。所以再改变它。
(1[0-2]|[1-9])
表示:1
后跟0到2之间的另一个数字,因此接受10,11,12。大括号是为了创建一个小组。
现在接受MMMM
(1[0-2]|[1-9]|January|February)
等。
这可以进一步组成,例如MM/YYYY
和YYYY
((1[0-2]|[1-9]|January|February)/)?<YYYY-Pattern>
也不要忘记匹配开头和开头:
^((1[0-2]|[1-9]|January|February)/)?<YYYY-Pattern>$
否则你会匹配abc MM/DD/YYYY bla
如果一切正常,您应该使用非捕获组,而不需要引用组的内容。因此^((1[0-2]|[1-9]|January|February)/)?<YYYY-Pattern>$
变为^(?:(1[0-2]|[1-9]|January|February)/)?<YYYY-Pattern>$
,因为您可能不需要使用/
引用该组。 (但我认为这取决于实现)。要引用groupse,您可能想要给它们命名。看看这里:http://www.regular-expressions.info/named.html
那就是我编写正则表达式的方式......
不要放弃,这将是一个更长的表达,但不是一个非常复杂的表达。