2

下面的正则表达式有什么作用?

^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$

特别是,该部分的目的是什么\1

4

3 回答 3

4

你应该看看教程。那里几乎没有任何先进的东西(除了\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),带有可能的定界符.-/(以及一致的定界符用法)。请注意,它不能确保正确的日期。月和日可以是从0099

请注意, 的确切含义\d取决于您使用的正则表达式引擎和文化。通常它的意思是[0-9](任何 ASCII 数字)。但例如在 .NET 中,它也可以表示“任何代表数字的 Unicode 字符”。

于 2012-11-22T23:53:05.860 回答
3
  1. ^字符串的开始
  2. \d{1,2}匹配 1 位或 2 位数字 (0-9)
  3. (\-|\/|\.)匹配“-”“/”“。”
  4. \d{1,2}再次匹配 1 或 2 位数字 (0-9)
  5. \1是一个反向引用。匹配第 3 组捕获的相同字符的另一个实例
  6. \d{4}匹配 4 位数字
  7. $字符串结束

这将匹配以下格式的日期。请注意,dd没有检查mm、 和yyyy范围,因此日期可能仍然无效。

d-m-yyyy
d/m/yyyy
d.m.yyyy

d&m可以是 1位2 位数字。

于 2012-11-22T23:52:57.820 回答
1

它匹配:

  • 一位或两位数
  • 破折号、斜线或句号
  • 一位或两位数
  • 另一个分隔符,就像之前的那个
  • 四位数

是对第一组匹配的\1值的反向引用,即(\-|\/|\.)

例如:

2-14-2003
99.99.9999
1/2/0001
于 2012-11-22T23:53:41.073 回答