import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "(\\b(\\b(?:times|some time|any time))\\b|\\b(1[0-9]th)\\b|\\b([2-3]0th)\\b|\\b([2-3]?1st)\\b|\\b(2?2nd)\\b|\\b(2?3rd)\\b|\\b(2?[4-9]th)\\b|\\b((?:(?:1[0-9]|2[0-4]|0?[0-9])(?:(?:[ ]?(?:or|[,/-]|to|and)[ ]?))){0,3}((?:1[0-9]|2[0-4]|0?[0-9]))((?:[ ]?[\\:\\.][ ]?)([0-5][0-9])|(?:[ ]?[ap]m|[ ]?o\\'?[ ]?clock)|(?:[ ]?(?: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)){1,3})\\b|\\b(january)\\b|\\b(jan\\b)\\b|\\b(february)\\b|\\b(feb\\b)\\b|\\b(march)\\b|\\b(mar\\b)\\b|\\b(april)\\b|\\b(apr\\b)\\b|\\b(may\\b)\\b|\\b(june)\\b|\\b(jun\\b)\\b|\\b(july)\\b|\\b(jul\\b)\\b|\\b(august)\\b|\\b(aug\\b)\\b|\\b(september)\\b|\\b(sept?)\\b|\\b(october)\\b|\\b(oct\\b)\\b|\\b(november)\\b|\\b(nov\\b)\\b|\\b(december)\\b|\\b(dec\\b)\\b|\\b(\\bnext\\b)\\b|\\b(tomorr?ow (?:afternoon|morning|\\bmorn\\b|evening|\\beve\\b|midd?ay))\\b|\\b(\\bfew\\b)\\b|\\b(\\bafter\\b)\\b|\\b(last (?:not Last [week] of [month|year]))\\b|\\b([Mm]onday)\\b|\\b(year)\\b|\\b(afternoon)\\b|\\b(hours?)\\b|\\b(\\bnoon\\b)\\b|\\b(lunch)\\b|\\b(weekend)\\b|\\b(seconds)\\b|\\b(meeting)\\b|\\b(\\bfirst\\b)\\b|\\b(\\bseveral\\b)\\b|\\b(\\bbefore\\b)\\b|\\b(the other [wee|day|month|year])\\b|\\b([Mm]on\\b)\\b|\\b(month)\\b|\\b(morning)\\b|\\b(minutes?)\\b|\\b(midnight)\\b|\\b(brunch)\\b|\\b(today)\\b|\\b(\\bsecs\\b)\\b|\\b(call)\\b|\\b(\\bsecond\\b)\\b|\\b(\\bcouple\\b)\\b|\\b(\\bbetween\\b)\\b|\\b(^^Regex less opening condition)\\b|\\b([Tt]uesday)\\b|\\b(\\bweek\\b)\\b|\\b(\\bmorn\\b)\\b|\\b(\\bdays\\b)\\b|\\b(midday)\\b|\\b(dinner)\\b|\\b(∆now)\\b|\\b(minutes)\\b|\\b(phone call)\\b|\\b(\\bthird\\b)\\b|\\b(\\bsome\\b)\\b|\\b(in ?-? ?between)\\b|\\b([Tt]ue\\b)\\b|\\b(\\bday\\b)\\b|\\b(evening)\\b|\\b(fou?rtnights)\\b|\\b(breakfast)\\b|\\b(tomorrow)\\b|\\b(\\bmins\\b)\\b|\\b(conference call)\\b|\\b(\\bfourth\\b)\\b|\\b(\\bmany\\b)\\b|\\b([Ww]ednesday)\\b|\\b(fou?rtnight)\\b|\\b(\\beve\\b)\\b|\\b(years)\\b|\\b(\\bmns\\b)\\b|\\b(coffee)\\b|\\b(following)\\b|\\b(\\bin a)\\b|\\b([Ww]eds?)\\b|\\b(days∆)\\b|\\b(midd?ay)\\b|\\b(months)\\b|\\b(hours)\\b|\\b(\\bcoming\\b)\\b|\\b([Tt]hursday)\\b|\\b(weeks)\\b|\\b(\\bhrs\\b)\\b|\\b(\\blast\\b)\\b|\\b([1-9][0-9])\\b|\\b([Tt]hur)\\b|\\b(\\bthis\\b)\\b|\\b([Ff]riday)\\b|\\b([Ff]ri\\b)\\b|\\b([Ss]aturday)\\b|\\b(meet)\\b|\\b([Ss]at\\b)\\b|\\b(phone)\\b|\\b([Ss]unday)\\b|\\b([Ss]un\\b)\\b|\\b(Enhanced Version For Martin. +ve Look Behinds and limited scope for the number of minutes in the secon number. 5,10,15,20,30,45 mins past the hour)\\b|\\b(Enhanced Version For Martin. +ve Look Behinds)\\b|\\b(\\bPS?T\\b)\\b|\\b(\\bGMT\\b)\\b|\\b(\\b∆USA\\b)\\b|\\b(\\b∆US\\b)\\b|\\b(\\bET\\b)\\b|\\b(\\bBST\\b)\\b|\\b(\\b∆UK\\b)\\b|\\b(\\bUK ?[Tt]ime\\b)\\b|\\b(\\b[Ee]astern [Tt]ime\\b)\\b|\\b(\\b[Pp]acific [Tt]ime\\b)\\b|\\b(\\b[Cc]entral [Tt]ime\\b)\\b|\\b(\\bACDT\\b)\\b|\\b(\\bACST\\b)\\b|\\b(\\bACT\\b)\\b|\\b(\\bADT\\b)\\b|\\b(\\bAEDT\\b)\\b|\\b(\\bAEST\\b)\\b|\\b(\\bAFT\\b)\\b|\\b(\\bAKDT\\b)\\b|\\b(\\bAKST\\b)\\b|\\b(\\bAMST\\b)\\b|\\b(\\bAMT\\b)\\b|\\b(\\bART\\b)\\b|\\b(\\bAST\\b)\\b|\\b(\\bAWDT\\b)\\b|\\b(\\bAWST\\b)\\b|\\b(\\bAZOST\\b)\\b|\\b(\\bAZT\\b)\\b|\\b(\\bBDT\\b)\\b|\\b(\\bBIOT\\b)\\b|\\b(\\bBRST\\b)\\b|\\b(\\bBRT\\b)\\b|\\b(\\bBTT\\b)\\b|\\b(\\bCCT\\b)\\b|\\b(\\bCDT\\b)\\b|\\b(\\bCEDT\\b)\\b|\\b(\\bCEST\\b)\\b|\\b(\\bCET\\b)\\b|\\b(\\bCHADT\\b)\\b|\\b(\\bCHAST\\b)\\b|\\b(\\bCHOT\\b)\\b|\\b(\\bChST\\b)\\b|\\b(\\bCHUT\\b)\\b|\\b(\\bCIST\\b)\\b|\\b(\\bCIT\\b)\\b|\\b(\\bCKT\\b)\\b|\\b(\\bCLST\\b)\\b|\\b(\\bCLT\\b)\\b|\\b(\\bCOT\\b)\\b|\\b(\\bCST\\b)\\b|\\b(\\bCT\\b)\\b|\\b(\\bCVT\\b)\\b|\\b(\\bCWST\\b)\\b|\\b(\\bCXT\\b)\\b|\\b(\\bDAVT\\b)\\b|\\b(\\bDDUT\\b)\\b|\\b(\\bDFT\\b)\\b|\\b(\\bEASST\\b)\\b|\\b(\\bECT\\b)\\b|\\b(\\bEDT\\b)\\b|\\b(\\bEEDT\\b)\\b|\\b(\\bEEST\\b)\\b|\\b(\\bEET\\b)\\b|\\b(\\bEGST\\b)\\b|\\b(\\bEGT\\b)\\b|\\b(\\bEIT\\b)\\b|\\b(\\bEST\\b)\\b|\\b(\\bFET\\b)\\b|\\b(\\bFJT\\b)\\b|\\b(\\bFKST\\b)\\b|\\b(\\bFKT\\b)\\b|\\b(\\bFNT\\b)\\b|\\b(\\bGALT\\b)\\b|\\b(\\bGAMT\\b)\\b|\\b(\\bGFT\\b)\\b|\\b(\\bGILT\\b)\\b|\\b(\\bGIT\\b)\\b|\\b(\\bGST\\b)\\b|\\b(\\bGYT\\b)\\b|\\b(\\bHADT\\b)\\b|\\b(\\bHAEC\\b)\\b|\\b(\\bHAST\\b)\\b|\\b(\\bHKT\\b)\\b|\\b(\\bHMT\\b)\\b|\\b(\\bHOVT\\b)\\b|\\b(\\bHST\\b)\\b|\\b(\\bIBST\\b)\\b|\\b(\\bICT\\b)\\b|\\b(\\bIDT\\b)\\b|\\b(\\bIRDT\\b)\\b|\\b(\\bIRKT\\b)\\b|\\b(\\bIRST\\b)\\b|\\b(\\bIST\\b)\\b|\\b(\\bJST\\b)\\b|\\b(\\bKGT\\b)\\b|\\b(\\bKOST\\b)\\b|\\b(\\bKRAT\\b)\\b|\\b(\\bKST\\b)\\b|\\b(\\bLHST\\b)\\b|\\b(\\bLINT\\b)\\b|\\b(\\bMAGT\\b)\\b|\\b(\\bMART\\b)\\b|\\b(\\bMAWT\\b)\\b|\\b(\\bMDT\\b)\\b|\\b(\\bMET\\b)\\b|\\b(\\bMEST\\b)\\b|\\b(\\bMHT\\b)\\b|\\b(\\bMIST\\b)\\b|\\b(\\bMMT\\b)\\b|\\b(\\bMSK\\b)\\b|\\b(\\bMST\\b)\\b|\\b(\\bMUT\\b)\\b|\\b(\\bMVT\\b)\\b|\\b(\\bMYT\\b)\\b|\\b(\\bNCT\\b)\\b|\\b(\\bNDT\\b)\\b|\\b(\\bNFT\\b)\\b|\\b(\\bNPT\\b)\\b|\\b(\\bNST\\b)\\b|\\b(\\bNT\\b)\\b|\\b(\\bNUT\\b)\\b|\\b(\\bNZDT\\b)\\b|\\b(\\bNZST\\b)\\b|\\b(\\bOMST\\b)\\b|\\b(\\bORAT\\b)\\b|\\b(\\bPDT\\b)\\b|\\b(\\bPETT\\b)\\b|\\b(\\bPGT\\b)\\b|\\b(\\bPHOT\\b)\\b|\\b(\\bPKT\\b)\\b|\\b(\\bPMDT\\b)\\b|\\b(\\bPMST\\b)\\b|\\b(\\bPONT\\b)\\b|\\b(\\bPST\\b)\\b|\\b(\\bPYST\\b)\\b|\\b(\\bPYT\\b)\\b|\\b(\\bRET\\b)\\b|\\b(\\bROTT\\b)\\b|\\b(\\bSAKT\\b)\\b|\\b(\\bSAMT\\b)\\b|\\b(\\bSAST\\b)\\b|\\b(\\bSBT\\b)\\b|\\b(\\bSCT\\b)\\b|\\b(\\bSGT\\b)\\b|\\b(\\bSLST\\b)\\b|\\b(\\bSRET\\b)\\b|\\b(\\bSRT\\b)\\b|\\b(\\bSST\\b)\\b|\\b(\\bSYOT\\b)\\b|\\b(\\bTAHT\\b)\\b|\\b(\\bTHA\\b)\\b|\\b(\\bTFT\\b)\\b|\\b(\\bTJT\\b)\\b|\\b(\\bTKT\\b)\\b|\\b(\\bTLT\\b)\\b|\\b(\\bTMT\\b)\\b|\\b(\\bTOT\\b)\\b|\\b(\\bTVT\\b)\\b|\\b(\\bUCT\\b)\\b|\\b(\\bULAT\\b)\\b|\\b(\\bUSZ1\\b)\\b|\\b(\\bUTC\\b)\\b|\\b(\\bUYST\\b)\\b|\\b(\\bUYT\\b)\\b|\\b(\\bUZT\\b)\\b|\\b(\\bVET\\b)\\b|\\b(\\bVLAT\\b)\\b|\\b(\\bVOLT\\b)\\b|\\b(\\bVOST\\b)\\b|\\b(\\bVUT\\b)\\b|\\b(\\bWAKT\\b)\\b|\\b(\\bWAST\\b)\\b|\\b(\\bWAT\\b)\\b|\\b(\\bWEDT\\b)\\b|\\b(\\bWEST\\b)\\b|\\b(\\bWET\\b)\\b|\\b(\\bWST\\b)\\b|\\b(\\bYAKT\\b)\\b|\\b(\\bUK\\b)\\b|\\b(\\bUS\\b)\\b|\\b(\\bPT\\b)\\b|\\b(\\bUK Time\\b)\\b|\\b(\\bUKTime\\b)\\b|\\b(\\bUK time\\b)\\b|\\b(\\bUKtime\\b)\\b|\\b(\\bEastern Time\\b)\\b|\\b(\\bEastern time\\b)\\b|\\b(\\beastern time\\b)\\b|\\b(\\bPacific Time\\b)\\b|\\b(\\bPacific time\\b)\\b|\\b(\\bpacific time\\b)\\b|\\b(\\bCentral Time\\b)\\b|\\b(\\bCentral time\\b)\\b|\\b(\\bcentral time\\b)\\b|\\b(\\bEasternTime\\b)\\b|\\b(\\bEasterntime\\b)\\b|\\b(Spanish time)\\b|\\b(Atlanta time)\\b)";
final String string = "NEW TIME MATCHING REGEX\n"
+ "*** REGEX 1: LONELY NUMBERS ***\n"
+ "12 or 3pm\n"
+ "4/5CET\n"
+ "5-6pm\n"
+ "2,4,5pm\n"
+ "1,3 or 6pm\n"
+ "OK. 1,2,3 and 5pm are available\n"
+ "12pm or 3pm <Shouldn't match \"or\"\n\n"
+ "#Military times\n"
+ "1200 or 1300.\n"
+ "1100,1300 or 1400.\n"
+ "121212121212121212 <don't match\n\n"
+ "*** REGEX 2: BASICS ***\n"
+ "1\n"
+ "11am or 2pm\n"
+ "12pm\n"
+ "12 CET\n"
+ "12pm CET\n"
+ "12.32pm\n"
+ "14 pm\n"
+ "10.00?\n"
+ "0.15\n"
+ "3 : 34\n"
+ "10 53\n"
+ "00.15\n"
+ "at3.00?\n"
+ "10amis good for me\n"
+ " 4 oclock\n"
+ "2o'clock\n"
+ "2 o clock\n"
+ "yes,3 am\n"
+ "12.50 GBP\n"
+ "USD 4.00\n\n"
+ "£12.50\n"
+ "10.93?\n"
+ "00000\n"
+ "0000-559\n"
+ "00001\n\n\n\n\n"
+ "00001\n"
+ "00001\n"
+ "01300\n"
+ "01700\n"
+ "from 2 - 6\n"
+ "there is about 3 of them\n"
+ "Not sure, maybe 14 apples?\n"
+ "how about 10 tomorrow? << should fail\n"
+ "10 tomorrow?\n"
+ "about £23.00\n\n\n"
+ "10,11 or 12\n"
+ "10, 11 or 2?\n"
+ "10 or 12?\n"
+ "10 or my place?\n"
+ "1030 or 1130\n"
+ "10.30 or 12?\n"
+ "10 and 11 work\n"
+ "10, 11, 12th?\n\n"
+ "1,000\n";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE | Pattern.CASE_INSENSITIVE | Pattern.COMMENTS);
final Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println("Full match: " + matcher.group(0));
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println("Group " + i + ": " + matcher.group(i));
}
}
}
}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Java, please visit: https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html