import Foundation
let pattern = #"\W+\w+\W+(?<EventTime>[^\\]+)\W+\w+\W+(?<HostName>[^\\]+).+?EventID\W+(?<EventID>[^,]+).+?Message\W+(?<Message>[^,]+(?=\\)).+"#
let regex = try! NSRegularExpression(pattern: pattern)
let testString = #"\"EventTime\":\"2017-08-11 10:40:07\",\"Hostname\":\"School4\",\"Keywords\":-9187343239835811840,\"EventType\":\"INFO\",\"SeverityValue\":2,\"Severity\":\"INFO\",\"EventID\":7036,\"SourceName\":\"Service Control Manager\",\"ProviderGuid\":\"{555908D1-A6D7-4695-8E1E-26931D2012F4}\",\"Version\":0,\"Task\":0,\"OpcodeValue\":0,\"RecordNumber\":263066,\"ProcessID\":548,\"ThreadID\":7528,\"Channel\":\"System\",\"Message\":\"Application Experience \xBC\xAD\xBA\u{7DEB0}\xA1 \xC1\xDF\xC1\xF6 \xBB\xF3\xC5·\xCE \xB5\xE9\xBE\xBD\xC0\xB4ϴ\xD9.\",\"param1\":\"Application Experience\",\"param2\":\"\xC1\xDF\xC1\xF6\",\"EventReceivedTime\":1502415607,\"SourceModuleName\":\"in\",\"SourceModuleType\":\"im_msvistalog\""#
let stringRange = NSRange(location: 0, length: testString.utf16.count)
if let firstMatch = regex.firstMatch(in: testString, range: stringRange) {
let result: [String] = (1 ..< firstMatch.numberOfRanges).map { (testString as NSString).substring(with: firstMatch.range(at: $0)) }
print(result)
} else {
print("No matches were found.")
}
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