正则表达式匹配所有月份/年份的日期

时间:2015-12-31 14:55:59

标签: regex

我有一个日期行列表,如

05.22.2013
07.11.2015
12.31.2014
12.05.2015
06.11.2015
11.30.2015

我需要一个RegEx来过滤除12.XX.2015之外的所有内容。

2 个答案:

答案 0 :(得分:1)

如果您不需要验证格式,可以使用

^(?!12.*2015).*$

https://regex101.com/r/bM8fF4/2

答案 1 :(得分:0)

由于其他建议会过滤掉以12开头且在字符串中的任何位置包含2015的任何字符串,我认为应该发布更精确的解决方案。

您可以使用锚定在模式开头的否定前瞻(?!12\.\d{2}\.2015$)。如果整个字符串与<start_of_string>12.<digit><digit>.2015<end_of_string>模式匹配,则匹配失败(=找不到匹配)。请注意,.必须使用反斜杠进行转义(在某些表示法中,必须加倍)以匹配文字句点符号。 \d{2}将匹配任何日期(甚至更多,但在这种情况下,所有日期字符串都已预先验证,因此这不是问题)。前瞻性末尾的$非常重要,因为它意味着字符串应以2015结尾,不允许更多文本。

使用

^(?!12\.\d{2}\.2015$)\d{2}\.\d{2}\.\d{4}$

请参阅demo

正则表达式解释

  • ^ - 字符串开头
  • (?!12\.\d{2}\.2015$) - 过滤2015年12月日期的限制性前瞻
  • \d{2} - 正好两位数
  • \. - 文字句号
  • \d{2} - 正好两位数
  • \. - 文字句号
  • \d{4} - 正好是四位数
  • $ - 字符串结束。

请注意,在不同的表示法中,反斜杠可能需要加倍。