正则表达式匹配与非日期匹配的一些日期

时间:2016-06-15 13:13:44

标签: regex

我正在使用一些正则表达式来查找crontab.gurucrontab.guru形式的日期字符串。

我正在使用的正则表达式是Jan 12, 2015并且它正常工作,但问题是文件上的字符串也是一些形式: Feb 3, 1999\w+\s\d{1,2},\s\d{4}我也匹配它们。

如何避免这些非日期匹配?我的方法是:

  1. 第一个字符串(月份中的一个,Weg 58, 4047Strasse 1, 4482等)必须始终为3。
  2. 年份必须以JanFeb开始。
  3. 问题是我不知道如何将这两个选项添加到我的正则表达式中。有什么帮助吗?

    您可以在此处进行测试:https://regex101.com/r/bN2pO0/1

    提前致谢。

2 个答案:

答案 0 :(得分:1)

正如您使用\d{1,2}匹配数字1或2次而\d{4}匹配数字4次,您可以使用\w{3}匹配字符3次。< / p>

对于这一年,您可以使用管道&#34;或&#34; operator |

\w{3}\s\d{1,2},\s(?:1|2)\d{3}

虽然,这也将匹配形式为Abc xy,1xyz

的非日期

如果你愿意,可以使用强力方法,或者只是摆脱正则表达式并使用代码来捕获日期。

蛮力:

(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s[0-2]?[0-9],\s[12]\d{3}

答案 1 :(得分:1)

由于月份不会发生变化(即:1月份之间的一致值 - Decemeber,我们可以设置3个起始字符。)

然后,我们可以使用OR |运算符选择以12

开头的年份
/((Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s\d{1,2},\s(1|2)\d{3})/ig

https://regex101.com/r/bN2pO0/3