【问题标题】:Stuck in logic trying to match pattern?陷入试图匹配模式的逻辑?
【发布时间】:2017-04-19 08:14:22
【问题描述】:

我正在运行一个基于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

每个字段可以有两种可能性,可以是各自的字段,也可以是“*”。最好的方法是两个检查这个模式的所有组合,每个字段都有两种可能性。

【问题讨论】:

  • 我会说正则表达式:D
  • 一个正则表达式可以检查所有可能性吗? @kaldoran
  • 我想是的,我现在正在创建它;)
  • 我的回答已经完成^^不要犹豫,验证或投票:p

标签: php math logic combinations permutation


【解决方案1】:

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

([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

现在你可以选择你想使用哪一个了 ;)

【讨论】:

  • 但是@kaldoran 我想将我当前的 cron 时间格式与保存的 cron 时间格式相匹配,如果找到它还应该验证 * 格式。
  • 两者都有,如果保存的格式是*.*.*.*.*.*,它会匹配,就像它是0.19.31.12.7.3000一样。
猜你喜欢
  • 2019-10-06
  • 2016-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-24
  • 1970-01-01
  • 2017-12-14
  • 1970-01-01
相关资源
最近更新 更多