import Foundation
let pattern = #"^.*?]\s(?<severity>\w+)\s+(?<group>[^\[]+)\[logno=(?<object>\d+)\,\s+user=(?<login>\w+)\,\s+usid=(?<recipient>\w+)\,\s+msg=\"(?<reason>[^"]*)\"]$"#
let regex = try! NSRegularExpression(pattern: pattern, options: .anchorsMatchLines)
let testString = #"""
10 23 2018 09:23:59 1.1.1.1 <LOC2:WARN> Oct 23 09:24:00 2018-10-23 09:24:00,076 [Thread-0] WARN EventLHost1d- UserSessNotification[STOP_TRANS, user=[name=admin, usid=72422, addr=127.0.0.1, prot=1], db=DB_RUNNING]
10 22 2018 17:07:48 1.1.4.1 <LOC2:WARN> Oct 22 17:08:00 2018-10-23 03: 08:00,393 [Thread-0] WARN EventLHost1d- AuditNotification[logno=103, user=admin, usid=0, msg="Logged in over ssh using externalauth, member of groups: admin,auditor,manage-appliance,manage-pki,manage-policy"]
10 19 2018 12:36:18 1.1.1.1 <LOC2:WARN> Oct 19 12:36:19 2018-10-19 12: 36:19,112 [Thread-0] WARN EventLHost1d- UserSessNotification[STOP, user=[name=admin, usid=27572, addr=127.0.0.1, prot=1], db=DB_NONE]
10 22 2018 09:36:11 1.1.4.1 <LOC2:WARN> Oct 22 09:36:22 2018-10-22 19: 36:22,691 [Thread-0] WARN EventLHost1d- AuditNotification[logno=107, user=admin, usid=32891, msg="Logged out from maapi ctx=webui (closed)"]
10 24 2018 09:31:54 1.1.1.1 <LOC2:ALRT> Oct 24 09:31:55 SSLCDMX Health monitoring: PROBLEM - SSLCDMX Metric: Load Utilization WARNING: Memory load is at 67.46%. - Capacity util=30.31%
10 22 2018 19:30:13 1.1.3.1 <LOC2:WARN> Oct 22 17:31:38 2018-10-22 17: 31:38,947 [Thread-0] WARN EventLHost1d- AuditNotification[logno=105, user=admin, usid=73051, msg="assigned to groups: manage-policy,manage-pki,manage-appliance,auditor,admin"]
10 23 2018 22:46:23 1.2.3.1 <LOC2:ALRT> Oct 24 01:45:01 SSLREYNOSA root: Health Monitoring (cron): Trimmed event history to 30 days.
10 23 2018 10:04:05 1.1.1.1 <LOC2:WARN> Oct 23 10:04:06 2018-10-23 10: 04:06,531 [Thread-0] WARN EventLHost1d- AuditNotification[logno=105, user=Host2ez, usid=72793, msg="assigned to groups: manage-pki"]
"""#
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