मैं निम्नलिखित code @ ph4r05 से जोड़ा और साथ ही एक regex उत्पन्न करने के लिए संशोधित किया;
^\s*($|#|\w+\s*=|(\?|\*|(?:[0-5]?\d)(?:(?:-|\/|\,)(?:[0-5]?\d))?(?:,(?:[0-5]?\d)(?:(?:-|\/|\,)(?:[0-5]?\d))?)*)\s+(\?|\*|(?:[0-5]?\d)(?:(?:-|\/|\,)(?:[0-5]?\d))?(?:,(?:[0-5]?\d)(?:(?:-|\/|\,)(?:[0-5]?\d))?)*)\s+(\?|\*|(?:[01]?\d|2[0-3])(?:(?:-|\/|\,)(?:[01]?\d|2[0-3]))?(?:,(?:[01]?\d|2[0-3])(?:(?:-|\/|\,)(?:[01]?\d|2[0-3]))?)*)\s+(\?|\*|(?:0?[1-9]|[12]\d|3[01])(?:(?:-|\/|\,)(?:0?[1-9]|[12]\d|3[01]))?(?:,(?:0?[1-9]|[12]\d|3[01])(?:(?:-|\/|\,)(?:0?[1-9]|[12]\d|3[01]))?)*)\s+(\?|\*|(?:[1-9]|1[012])(?:(?:-|\/|\,)(?:[1-9]|1[012]))?(?:L|W)?(?:,(?:[1-9]|1[012])(?:(?:-|\/|\,)(?:[1-9]|1[012]))?(?:L|W)?)*|\?|\*|(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)(?:(?:-)(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC))?(?:,(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)(?:(?:-)(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC))?)*)\s+(\?|\*|(?:[0-6])(?:(?:-|\/|\,|#)(?:[0-6]))?(?:L)?(?:,(?:[0-6])(?:(?:-|\/|\,|#)(?:[0-6]))?(?:L)?)*|\?|\*|(?:MON|TUE|WED|THU|FRI|SAT|SUN)(?:(?:-)(?:MON|TUE|WED|THU|FRI|SAT|SUN))?(?:,(?:MON|TUE|WED|THU|FRI|SAT|SUN)(?:(?:-)(?:MON|TUE|WED|THU|FRI|SAT|SUN))?)*)(|\s)+(\?|\*|(?:|\d{4})(?:(?:-|\/|\,)(?:|\d{4}))?(?:,(?:|\d{4})(?:(?:-|\/|\,)(?:|\d{4}))?)*))$
यहाँ जावा कोड है: यहाँ regex है
private static String cronRegex = null;
public static String getCronRegex()
{
if (cronRegex == null)
{
// numbers intervals and regex
Map<String, String> numbers = new HashMap<String, String>();
numbers.put("sec", "[0-5]?\\d");
numbers.put("min", "[0-5]?\\d");
numbers.put("hour", "[01]?\\d|2[0-3]");
numbers.put("day", "0?[1-9]|[12]\\d|3[01]");
numbers.put("month", "[1-9]|1[012]");
numbers.put("dow", "[0-6]");
numbers.put("year", "|\\d{4}");
Map<String, String> field_re = new HashMap<String, String>();
// expand regex to contain different time specifiers
for (String field : numbers.keySet())
{
String number = numbers.get(field);
String range = "(?:" + number + ")(?:(?:-|\\/|\\," + ("dow".equals(field)? "|#" : "") +
")(?:" + number + "))?" + ("dow".equals(field)? "(?:L)?" : ("month".equals(field)? "(?:L|W)?" : ""));
field_re.put(field, "\\?|\\*|" + range + "(?:," + range + ")*");
}
// add string specifiers
String monthRE = field_re.get("month");
String monthREVal = "JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC";
String monthRERange = "(?:" + monthREVal + ")(?:(?:-)(?:" + monthREVal + "))?" ;
monthRE = monthRE + "|\\?|\\*|" + monthRERange + "(?:," + monthRERange + ")*" ;
field_re.put("month", monthRE);
String dowRE = field_re.get("dow");
String dowREVal = "MON|TUE|WED|THU|FRI|SAT|SUN";
String dowRERange = "(?:" + dowREVal + ")(?:(?:-)(?:" + dowREVal + "))?" ;
dowRE = dowRE + "|\\?|\\*|" + dowRERange + "(?:," + dowRERange + ")*" ;
field_re.put("dow", dowRE);
StringBuilder fieldsReSB = new StringBuilder();
fieldsReSB.append("^\\s*(").append("$") //
.append("|#") //
.append("|\\w+\\s*=") //
.append("|") //
.append("(")//
.append(field_re.get("sec")).append(")\\s+(")//
.append(field_re.get("min")).append(")\\s+(")//
.append(field_re.get("hour")).append(")\\s+(")//
.append(field_re.get("day")).append(")\\s+(")//
.append(field_re.get("month")).append(")\\s+(")//
.append(field_re.get("dow")).append(")(|\\s)+(")//
.append(field_re.get("year"))//
.append(")")//
.append(")")//
.append("$");
cronRegex = fieldsReSB.toString();
}
return cronRegex;
}
मैं किसी भी तरह से कर रहा हूँ एक regex विशेषज्ञ का मतलब है, लेकिन कम से कम यह सब क्वार्ट्ज द्वारा दिए गए उदाहरण पर काम करने लगता है documentation
ध्यान दें कि वैधता इस विधि द्वारा जाँच के रूप में नहीं * गारंटी * कि एक अभिव्यक्ति काम करेंगे करता है: हम नीचे कुछ के टुकड़े प्रदान करते हैं। जैसे 'isValidExpression (" 0 0 12 1/2 * एमओएन-एफआरआई * ") 'सत्य लौटाता है, लेकिन रनटाइम पर यह' असमर्थित ऑपरेशन अपवाद) फेंकता है: दिन-प्रति-सप्ताह और एक दिन के महीने पैरामीटर को निर्दिष्ट करने के लिए समर्थन लागू नहीं किया गया है । – Jonik
दरअसल, इसलिए अभिव्यक्ति शुरू करने के लिए बेहतर है, और निर्माता को buildExpression को कॉल करने दें ताकि आप सुनिश्चित हो सकें कि यह क्वार्ट्ज –
@AhmedHashem 'isValidExpression' विधि के लिए एक वैध अभिव्यक्ति है, पहले से ही आंतरिक रूप से 'क्रोनएक्सप्रेस' और कैच शुरू करता है कोई भी 'पारसे अपवाद'। तो यह अलग नहीं होना चाहिए। – destan