下面的正则表达式有什么作用?
^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$
特别是,该部分的目的是什么\1
?
你应该看看教程。那里几乎没有任何先进的东西(除了\1
你指出的):
^ # the start of the string
\d # a digit
{1,2} # 1 or 2 of those
( # start the first subpattern, which can later be referred to with \1
\- # a literal hyphen (there is no need for escaping, but it doesn't hurt)
| # or
\/ # a literal slash
| # or
\. # a literal period
) # end of subpattern
\d{1,2} # one or two more digits
\1 # the exact same thing that was matched in the first subpattern. this
# is called a backreference
\d{4} # 4 digits
$ # the end of the string
即,这断言输入字符串仅包含一个日期,不多不少,格式ddmmyyyy
(或也可能是mmddyyyy
),带有可能的定界符.
,-
或/
(以及一致的定界符用法)。请注意,它不能确保正确的日期。月和日可以是从00
到99
。
请注意, 的确切含义\d
取决于您使用的正则表达式引擎和文化。通常它的意思是[0-9]
(任何 ASCII 数字)。但例如在 .NET 中,它也可以表示“任何代表数字的 Unicode 字符”。
^
字符串的开始\d{1,2}
匹配 1 位或 2 位数字 (0-9)(\-|\/|\.)
匹配“-”或“/”或“。”\d{1,2}
再次匹配 1 或 2 位数字 (0-9)\1
是一个反向引用。匹配第 3 组捕获的相同字符的另一个实例\d{4}
匹配 4 位数字$
字符串结束这将匹配以下格式的日期。请注意,dd
没有检查mm
、 和yyyy
范围,因此日期可能仍然无效。
d-m-yyyy
d/m/yyyy
d.m.yyyy
d
&m
可以是 1位或2 位数字。
它匹配:
是对第一组匹配的\1
值的反向引用,即(\-|\/|\.)
。
例如:
2-14-2003
99.99.9999
1/2/0001