陷入逻辑试图匹配模式?

时间:2017-04-19 08:14:22

标签: php math logic combinations permutation

我正在运行基于exetime的脚本,exetime以下列格式保存在数据库中。

* * * * * *
| | | | | | 
| | | | | +-- Year              (range: 1900-3000)
| | | | +---- Day of the Week   (range: 1-7, 1 standing for Monday)
| | | +------ Month of the Year (range: 1-12)
| | +-------- Day of the Month  (range: 1-31)
| +---------- Hour              (range: 0-23)
+------------ Minute            (range: 0-59)

现在我需要用当前的

检查exetime
  

M.H.DofM.MofY.DofW.Y

每个字段可以有两个可能,它可以是相应的字段,也可以是“*”。什么是最好的方式,两个检查这个模式与所有组合,每个领域有两种可能性。

1 个答案:

答案 0 :(得分:0)

这是我认为的正则表达式:

([0-5]?[0-9]|\*)\.([0-1]?[0-9]|2[0-3]|\*)\.([1-2]?[0-9]|3[0-1]|\*)\.([0-9]|1[0-2]|\*)\.([1-7]|\*)\.(19[0-9][0-9]|2[0-9]{3}|3000|\*)

让我们逐一解释这一部分,|等于"和"我的解释;所有部分都由\.分开,这是"。"

([0-5]?[0-9]|\*) 

将匹配0到59之间的所有数字或* 这(与其他人一样)将允许您使用00

([0-1]?[0-9]|2[0-3]|\*)

将匹配0到19和20到23之间的所有数字或*

([1-2]?[0-9]|3[0-1]|\*)

将匹配0到29之间以及30到31之间的所有数字或*

([0-9]|1[0-2]|\*)

轻松一个;从0到9或从10到12或*

([1-7]|\*)

匹配1到7或*

(19[0-9][0-9]|2[0-9]{3}|3000|\*)

匹配1900年至1999年以及2000年至2999年和3000年或*

这是一个例子: https://regex101.com/r/Orlp3o/2

我让你测试一些;)

好吧,我编辑我的答案是为了添加@Mark Ba​​ker一个, https://github.com/mtdowling/cron-expression

现在您可以选择要使用的那个;)