import Foundation
let pattern = ##"^(((\*|(\d\d?))(\/\d\d?)?)|(\d\d?\-\d\d?))(,(((\*|(\d\d?))(\/\d\d?)?)|(\d\d?\-\d\d?)))*\s(((\*|(\d\d?))(\/\d\d?)?)|(\d\d?\-\d\d?))(,(((\*|(\d\d?))(\/\d\d?)?)|(\d\d?\-\d\d?)))*\s(((\*|(\d\d?))(\/\d\d?)?)|(\d\d?\-\d\d?))(,(((\*|(\d\d?))(\/\d\d?)?)|(\d\d?\-\d\d?)))*\s(\?|(((\*|(\d\d?L?))(\/\d\d?)?)|(\d\d?L?\-\d\d?L?)|L|(\d\d?W))(,(((\*|(\d\d?L?))(\/\d\d?)?)|(\d\d?L?\-\d\d?L?)|L|(\d\d?W)))*)\s(((\*|(\d|10|11|12|JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC))(\/\d\d?)?)|((\d|10|11|12|JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)\-(\d|10|11|12|JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)))(,(((\*|(\d|10|11|12|JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC))(\/\d\d?)?)|((\d|10|11|12|JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)\-(\d|10|11|12|JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC))))*\s(((\*|([0-7]|MON|TUE|WED|THU|FRI|SAT|SUN)L?)(\/\d\d?)?)|(([0-7]|MON|TUE|WED|THU|FRI|SAT|SUN)L?\-([0-7]|MON|TUE|WED|THU|FRI|SAT|SUN)L?)|([0-7]|MON|TUE|WED|THU|FRI|SAT|SUN)L?#([1-5]))(,(((\*|([0-7]|MON|TUE|WED|THU|FRI|SAT|SUN)L?)(\/\d\d?)?)|(([0-7]|MON|TUE|WED|THU|FRI|SAT|SUN)L?\-([0-7]|MON|TUE|WED|THU|FRI|SAT|SUN)L?)|([0-7]|MON|TUE|WED|THU|FRI|SAT|SUN)L?#([1-5])))*$"##
let regex = try! NSRegularExpression(pattern: pattern, options: [.anchorsMatchLines, .caseInsensitive])
let testString = ##"""
* * * * * *
* * * * * *
* * * * * *
3 * * * * *
3 * * * * *
3 * * * * *
3 * * * * *
3 * * * * *
5/15 * * * * *
5/15 * * * * *
5/15 * * * * *
5/15 * * * * *
5/15 * * * * *
7,19 * * * * *
7,19 * * * * *
7,19 * * * * *
2-45 * * * * *
2-4 * * * * *
42-45 * * * * *
42-45 * * * * *
42-45 * * * * *
42-45 * * * * *
42-63 * * * * *
0 3 * * * *
0 3 * * * *
0 0/15 * * * *
0 0/15 * * * *
0 0/15 * * * *
0 0/15 * * * *
0 7,19 * * * *
0 7,19 * * * *
0 * 3 * * *
0 * 3 * * *
0 * 3 * * *
0 * 0/15 * * *
0 * 0/15 * * *
0 * 0/15 * * *
0 * 0/15 * * *
0 * 0/15 * * *
0 * 7,19 * * *
0 * 7,19 * * *
0 * 7,19 * * *
0 1 * * * *
0 0 * * * *
0 * * 3 * *
0 * * 3 * *
0 * * 3 * *
0 * * 3 * *
0 0 0 1/15 * *
0 0 0 1/15 * *
0 0 0 1/15 * *
0 0 0 1/15 * *
0 0 0 7,19 * *
0 0 0 7,19 * *
0 0 0 7,19 * *
0 0 0 7,19 * *
0 0 0 L * *
0 0 0 L * *
0 0 0 3L * *
0 0 0 3L * *
0 0 0 9W * *
0 0 0 9W * *
0 0 0 9W * *
0 0 0 9W * *
0 0 0 9X */2 *
0 0 0 9#2 * *
0 0 0 1 5 *
0 0 0 1 5/2 *
0 0 0 1 5/2 *
0 0 0 1 5/10 *
0 0 0 1 3,7,12 *
0 0 0 1 3,7,12 *
0 0 0 1 3,7,12 *
0 0 0 1 MAR,JUL,DEC *
0 0 0 1 MAR,JUL,DEC *
0 0 0 1 MAR,JUL,DEC *
0 0 0 1 ? *
0 0 0 * * 3
0 0 0 * * 3
0 0 0 * * 3
0 0 0 * * 3
0 0 0 * * 3/2
0 0 0 * * 3/2
0 0 0 * * 3/2
0 0 0 * * 3/2
0 0 0 * * 1,5,7
0 0 0 * * 1,5,7
0 0 0 * * 1,5,7
0 0 0 * * MON,FRI,SUN
0 0 0 * * MON,FRI,SUN
0 0 0 * * MON,FRI,SUN
0 0 0 * * 5L
0 0 0 * * 5L
0 0 0 * * 5L
0 0 0 * * FRIL
0 0 0 * * 5W
0 0 0 * * 5?3
0 0 0 * * 0
0 0 0 * * 0L
0 0 0 * * 0#2
0 0 0 * * 7
0 0 0 * * 7L
0 0 0 * * 7#2
0 0 0 * * 5#3
0 0 0 * * 5#3
0 0 0 * * 7#1
0 0 0 * * 7#1
0 0 0 * * 3#5
0 0 0 * * WED#5
* * 5-1 * * *
"""##
let stringRange = NSRange(location: 0, length: testString.utf16.count)
let matches = regex.matches(in: testString, range: stringRange)
var result: [[String]] = []
for match in matches {
var groups: [String] = []
for rangeIndex in 1 ..< match.numberOfRanges {
let nsRange = match.range(at: rangeIndex)
guard !NSEqualRanges(nsRange, NSMakeRange(NSNotFound, 0)) else { continue }
let string = (testString as NSString).substring(with: nsRange)
groups.append(string)
}
if !groups.isEmpty {
result.append(groups)
}
}
print(result)
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 Swift 5.2, please visit: https://developer.apple.com/documentation/foundation/nsregularexpression