Skip to content

Commit a30482a

Browse files
authored
Merge pull request #2 from EvanK/1-ignored-increment-of-month-range
Match increments on a range of months
2 parents 0109c86 + c89a1c7 commit a30482a

File tree

3 files changed

+44
-8
lines changed

3 files changed

+44
-8
lines changed

cron/months.pl

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
## end first single month unit
2323
# optional second unit (range) or increment
2424
(?:
25-
# range, a literal dash followed by ANOTHER single unit
25+
# range, a literal dash followed by ANOTHER single unit (optionally followed by an ignored increment)
2626
(?:
2727
[-]
2828
## second single month unit
@@ -41,6 +41,11 @@
4141
[*]
4242
)
4343
## end second single month unit
44+
# optional (ignored) increment, immediately following said range
45+
(?:
46+
[/]
47+
[0-9]+
48+
)?
4449
)
4550
|
4651
# OR increment, a literal slash followed by integer increment value
@@ -71,7 +76,7 @@
7176
## end first single month unit
7277
# optional second unit (range) or increment
7378
(?:
74-
# range, a literal dash followed by ANOTHER single unit
79+
# range, a literal dash followed by ANOTHER single unit (optionally followed by an ignored increment)
7580
(?:
7681
[-]
7782
## second single month unit
@@ -90,6 +95,11 @@
9095
[*]
9196
)
9297
## end second single month unit
98+
# optional (ignored) increment, immediately following said range
99+
(?:
100+
[/]
101+
[0-9]+
102+
)?
93103
)
94104
|
95105
# OR increment, a literal slash followed by integer increment value
@@ -125,7 +135,7 @@
125135
## end first single month unit
126136
# optional second unit (range) or increment
127137
(?:
128-
# range, a literal dash followed by ANOTHER single unit
138+
# range, a literal dash followed by ANOTHER single unit (optionally followed by an ignored increment)
129139
(?:
130140
[-]
131141
## second single month unit
@@ -144,6 +154,11 @@
144154
[*]
145155
)
146156
## end second single month unit
157+
# optional (ignored) increment, immediately following said range
158+
(?:
159+
[/]
160+
[0-9]+
161+
)?
147162
)
148163
|
149164
# OR increment, a literal slash followed by integer increment value

main.pl

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@
265265
## end first single month unit
266266
# optional second unit (range) or increment
267267
(?:
268-
# range, a literal dash followed by ANOTHER single unit
268+
# range, a literal dash followed by ANOTHER single unit (optionally followed by an ignored increment)
269269
(?:
270270
[-]
271271
## second single month unit
@@ -284,6 +284,11 @@
284284
[*]
285285
)
286286
## end second single month unit
287+
# optional (ignored) increment, immediately following said range
288+
(?:
289+
[/]
290+
[0-9]+
291+
)?
287292
)
288293
|
289294
# OR increment, a literal slash followed by integer increment value
@@ -314,7 +319,7 @@
314319
## end first single month unit
315320
# optional second unit (range) or increment
316321
(?:
317-
# range, a literal dash followed by ANOTHER single unit
322+
# range, a literal dash followed by ANOTHER single unit (optionally followed by an ignored increment)
318323
(?:
319324
[-]
320325
## second single month unit
@@ -333,6 +338,11 @@
333338
[*]
334339
)
335340
## end second single month unit
341+
# optional (ignored) increment, immediately following said range
342+
(?:
343+
[/]
344+
[0-9]+
345+
)?
336346
)
337347
|
338348
# OR increment, a literal slash followed by integer increment value
@@ -627,7 +637,7 @@
627637
## end first single month unit
628638
# optional second unit (range) or increment
629639
(?:
630-
# range, a literal dash followed by ANOTHER single unit
640+
# range, a literal dash followed by ANOTHER single unit (optionally followed by an ignored increment)
631641
(?:
632642
[-]
633643
## second single month unit
@@ -646,6 +656,11 @@
646656
[*]
647657
)
648658
## end second single month unit
659+
# optional (ignored) increment, immediately following said range
660+
(?:
661+
[/]
662+
[0-9]+
663+
)?
649664
)
650665
|
651666
# OR increment, a literal slash followed by integer increment value
@@ -676,7 +691,7 @@
676691
## end first single month unit
677692
# optional second unit (range) or increment
678693
(?:
679-
# range, a literal dash followed by ANOTHER single unit
694+
# range, a literal dash followed by ANOTHER single unit (optionally followed by an ignored increment)
680695
(?:
681696
[-]
682697
## second single month unit
@@ -695,6 +710,11 @@
695710
[*]
696711
)
697712
## end second single month unit
713+
# optional (ignored) increment, immediately following said range
714+
(?:
715+
[/]
716+
[0-9]+
717+
)?
698718
)
699719
|
700720
# OR increment, a literal slash followed by integer increment value
@@ -820,6 +840,6 @@
820840
# (note the /x flag will ignore the leading and trailing newlines regardless)
821841
our $collapsed = qr`
822842
823-
^(?:rate[(](?:(?:1[ ]+(hour|minute|day))|(?:[0-9]+[ ]+(hours|minutes|days)))[)])|(?:cron[(](?:(?:(?:[0-5]?[0-9])|[*])(?:(?:[-](?:(?:[0-5]?[0-9])|[*]))|(?:[/][0-9]+))?(?:[,](?:(?:[0-5]?[0-9])|[*])(?:(?:[-](?:(?:[0-5]?[0-9])|[*]))|(?:[/][0-9]+))?)*)[ ]+(?:(?:(?:[0-2]?[0-9])|[*])(?:(?:[-](?:(?:[0-2]?[0-9])|[*]))|(?:[/][0-9]+))?(?:[,](?:(?:[0-2]?[0-9])|[*])(?:(?:[-](?:(?:[0-2]?[0-9])|[*]))|(?:[/][0-9]+))?)*)[ ]+(?:(?:[?][ ]+(?:(?:(?:[1]?[0-9])|(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)|[*])(?:(?:[-](?:(?:[1]?[0-9])|(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)|[*]))|(?:[/][0-9]+))?(?:[,](?:(?:[1]?[0-9])|(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)|[*])(?:(?:[-](?:(?:[1]?[0-9])|(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)|[*]))|(?:[/][0-9]+))?)*)[ ]+(?:(?:(?:[1-7]|(?:SUN|MON|TUE|WED|THU|FRI|SAT))[#][0-5])|(?:(?:(?:(?:[1-7]|(?:SUN|MON|TUE|WED|THU|FRI|SAT))L?)|[L*])(?:(?:[-](?:(?:(?:[1-7]|(?:SUN|MON|TUE|WED|THU|FRI|SAT))L?)|[L*]))|(?:[/][0-9]+))?(?:[,](?:(?:(?:[1-7]|(?:SUN|MON|TUE|WED|THU|FRI|SAT))L?)|[L*])(?:(?:[-](?:(?:(?:[1-7]|(?:SUN|MON|TUE|WED|THU|FRI|SAT))L?)|[L*]))|(?:[/][0-9]+))?)*)))|(?:(?:(?:(?:(?:[1-3]?[0-9])W?)|LW|[L*])(?:(?:[-](?:(?:(?:[1-3]?[0-9])W?)|LW|[L*]))|(?:[/][0-9]+))?(?:[,](?:(?:(?:[1-3]?[0-9])W?)|LW|[L*])(?:(?:[-](?:(?:(?:[1-3]?[0-9])W?)|LW|[L*]))|(?:[/][0-9]+))?)*)[ ]+(?:(?:(?:[1]?[0-9])|(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)|[*])(?:(?:[-](?:(?:[1]?[0-9])|(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)|[*]))|(?:[/][0-9]+))?(?:[,](?:(?:[1]?[0-9])|(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)|[*])(?:(?:[-](?:(?:[1]?[0-9])|(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)|[*]))|(?:[/][0-9]+))?)*)[ ]+[?]))[ ]+(?:(?:(?:[12][0-9]{3})|[*])(?:(?:[-](?:(?:[12][0-9]{3})|[*]))|(?:[/][0-9]+))?(?:[,](?:(?:[12][0-9]{3})|[*])(?:(?:[-](?:(?:[12][0-9]{3})|[*]))|(?:[/][0-9]+))?)*)[)])$
843+
^(?:rate[(](?:(?:1[ ]+(hour|minute|day))|(?:[0-9]+[ ]+(hours|minutes|days)))[)])|(?:cron[(](?:(?:(?:[0-5]?[0-9])|[*])(?:(?:[-](?:(?:[0-5]?[0-9])|[*]))|(?:[/][0-9]+))?(?:[,](?:(?:[0-5]?[0-9])|[*])(?:(?:[-](?:(?:[0-5]?[0-9])|[*]))|(?:[/][0-9]+))?)*)[ ]+(?:(?:(?:[0-2]?[0-9])|[*])(?:(?:[-](?:(?:[0-2]?[0-9])|[*]))|(?:[/][0-9]+))?(?:[,](?:(?:[0-2]?[0-9])|[*])(?:(?:[-](?:(?:[0-2]?[0-9])|[*]))|(?:[/][0-9]+))?)*)[ ]+(?:(?:[?][ ]+(?:(?:(?:[1]?[0-9])|(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)|[*])(?:(?:[-](?:(?:[1]?[0-9])|(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)|[*])(?:[/][0-9]+)?)|(?:[/][0-9]+))?(?:[,](?:(?:[1]?[0-9])|(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)|[*])(?:(?:[-](?:(?:[1]?[0-9])|(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)|[*])(?:[/][0-9]+)?)|(?:[/][0-9]+))?)*)[ ]+(?:(?:(?:[1-7]|(?:SUN|MON|TUE|WED|THU|FRI|SAT))[#][0-5])|(?:(?:(?:(?:[1-7]|(?:SUN|MON|TUE|WED|THU|FRI|SAT))L?)|[L*])(?:(?:[-](?:(?:(?:[1-7]|(?:SUN|MON|TUE|WED|THU|FRI|SAT))L?)|[L*]))|(?:[/][0-9]+))?(?:[,](?:(?:(?:[1-7]|(?:SUN|MON|TUE|WED|THU|FRI|SAT))L?)|[L*])(?:(?:[-](?:(?:(?:[1-7]|(?:SUN|MON|TUE|WED|THU|FRI|SAT))L?)|[L*]))|(?:[/][0-9]+))?)*)))|(?:(?:(?:(?:(?:[1-3]?[0-9])W?)|LW|[L*])(?:(?:[-](?:(?:(?:[1-3]?[0-9])W?)|LW|[L*]))|(?:[/][0-9]+))?(?:[,](?:(?:(?:[1-3]?[0-9])W?)|LW|[L*])(?:(?:[-](?:(?:(?:[1-3]?[0-9])W?)|LW|[L*]))|(?:[/][0-9]+))?)*)[ ]+(?:(?:(?:[1]?[0-9])|(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)|[*])(?:(?:[-](?:(?:[1]?[0-9])|(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)|[*])(?:[/][0-9]+)?)|(?:[/][0-9]+))?(?:[,](?:(?:[1]?[0-9])|(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)|[*])(?:(?:[-](?:(?:[1]?[0-9])|(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)|[*])(?:[/][0-9]+)?)|(?:[/][0-9]+))?)*)[ ]+[?]))[ ]+(?:(?:(?:[12][0-9]{3})|[*])(?:(?:[-](?:(?:[12][0-9]{3})|[*]))|(?:[/][0-9]+))?(?:[,](?:(?:[12][0-9]{3})|[*])(?:(?:[-](?:(?:[12][0-9]{3})|[*]))|(?:[/][0-9]+))?)*)[)])$
824844
825845
`x;

tests/positives.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,4 @@ cron(0 23-4 L * ? *) First minute of every hour between 11am and 4pm on last day
1919
cron(0 0 L 6 ? 2020-2040) Midnight (UTC+0) on last day of June, from 2020 to 2040
2020
cron(0 0 ? * SUN,TUE,THU *) Midnight (UTC+0) every Sunday, Tuesday and Thursday
2121
cron(0 0 1 1 ? 2020/3) Midnight (UTC+0) on first day of every month, every 3 years starting from 2020
22+
cron(0 0 1 JAN-MAR/2 ? *) Midnight (UTC+0) on first day of month, January through March, silently ignoring increment of month

0 commit comments

Comments
 (0)