r"
#Modifiers << NOT GOING TO DO THESE HERE.
#∂ Before After Until in?Between
#∂ onwards
#Time-Time << Don't need as both times will match
#Lonely HOURS List: 10,time or 12 <not going to do this
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# - - - - - - - - - - - BIG TIME REGEX - - - - - - - - - - - -
#LONELY HOURS
#These guys are just \d\d. So we identify them through proximity to known times
(?:
#Boundary Lookaround
(?<=[ ]|^|[^\d\.:\r\n$£-])
#hour - you always have hours
(?:1[0-9]|2[0-4]|0?[0-9])
(?:
#Hour [or / to - , and]
#People don't say "12pm or 3?" much. Build it if it comes up.
(?:[ ]? (?:or|[,/-]|to|and) [ ]?)
)
){0,3}
#TIME BASICS:
#Basic times that are definitely times. Have to come last so longer strings match first.
#Boundary Lookaround (BREAK THIS FOR THE LONELY NUMBERS)
# (?<=[ ]|^|[^\d\.:\r\n$£-])
#hour - you always have hours
( (?:1[0-9]|2[0-4]|0?[0-9]) )
#Clarifier. Minutes, AM|PM, a TimeZone or a combination.
(
#Minutes
(?:[ ]?[\:\. ][ ]?) ([0-5][0-9])
#AM|PM
| (?:[ ]?[ap]m|[ ]?o\'?[ ]?clock)
#TimeZones
| (?:[ ]? (?:PS?T|GMT|∆USA|∆US|ET|BST|∆UK
|UK[ ]?[Tt]ime|[Ee]astern[ ]?[Tt]ime|[Pp]acific[ ]?[Tt]ime|[Cc]entral[ ]?[Tt]ime
|∆UTC|ACDT|ACST|ACT|ACT|ADT|AEDT|AEST|AFT|AKDT|AKST|AMST|AMT|AMT|ART|AST|AST|AWDT
|AWST|AZOST|AZT|BDT|BDT|BIOT|BRST|BRT|BST|BST|BST|BTT|CCT|CDT|CDT|CEDT|CEST|CET
|CHADT|CHAST|CHOT|ChST|CHUT|CIST|CIT|CKT|CLST|CLT|COT|CST|CST|CST|CST|CST|CT|CVT
|CWST|CXT|DAVT|DDUT|DFT|EASST|ECT|ECT|EDT|EEDT|EEST|EET|EGST|EGT|EIT|EST|EST|FET
|FJT|FKST|FKST|FKT|FNT|GALT|GAMT|GFT|GILT|GIT|GMT|GST|GST|GYT|HADT|HAEC|HAST|HKT
|HMT|HOVT|HST|IBST|ICT|IDT|IRDT|IRKT|IRST|IST|IST|IST|JST|KGT|KOST|KRAT|KST|LHST
|LHST|LINT|MAGT|MART|MAWT|MDT|MET|MEST|MHT|MIST|MMT|MSK|MST|MST|MST|MUT|MVT|MYT|NCT
|NDT|NFT|NPT|NST|NT|NUT|NZDT|NZST|OMST|ORAT|PDT|PETT|PGT|PHOT|PKT|PMDT|PMST|PONT
|PST|PST|PYST|PYT|RET|ROTT|SAKT|SAMT|SAST|SBT|SCT|SGT|SLST|SRET|SRT|SST|SST|SYOT
|TAHT|THA|TFT|TJT|TKT|TLT|TMT|TOT|TVT|ULAT|USZ1|UYST|UYT|UZT|VET|VLAT|VOLT|VOST
|VUT|WAKT|WAST|WAT|WEDT|WEST|WET|WST|YAKT)\b )
#Now enable the combo. Note ideally we would say "use one of each" e.g., =/10:234210
){1,3}
#Lonely HOURS: List of Military times <Here we have enough info to allow no ":".
|( (?:
#Boundary Lookaround
(?<=[ ]|^|[^\d\.:\r\n$£-])
#Must open with a military time, no "445" must be "0445"
(?:1[0-9]|2[0-4]|0[0-9])
(?:[ ]?[0-5][0-9][ ]?)
#or and
(?:[ ]? (?:or|[,/-]|to|and) [ ]?)
#2-4 military times, including the closing one
){1,3}
#Must also end with a military time
(?:1[0-9]|2[0-4]|0[0-9])
(?:[ ]?[0-5][0-9][ ]?)
)
#Post rationalise the boundary criteria (?:\b|$|,\b)
"
gmix