import Foundation
let pattern = #"<Entry>((?!<\/Entry>).)*<\/Entry>"#
let regex = try! NSRegularExpression(pattern: pattern, options: .dotMatchesLineSeparators)
let testString = #"""
<Entry>
<Type>Unknown</Type>
<DateTime>11/28/2017 11:19:49.652</DateTime>
<Level>Exception</Level>
<Host>CNTX-PROD-WEB-A</Host>
<ThreadID>139</ThreadID>
<Request.URL>https://bonnier.magazine-services.net:44314/CS/Account.aspx?accountid=3622083</Request.URL>
<Comment>Subscript =3420512 - Has an invalid state. The publication is ceased, but the subscription is not canceled.</Comment>
<ExceptionMessage>Issue with subscription: 3420512</ExceptionMessage>
</Entry>
<Entry>
<Type>Unknown</Type>
<DateTime>11/28/2017 11:19:49.652</DateTime>
<Level>Exception</Level>
<Host>CNTX-PROD-WEB-A</Host>
<ThreadID>139</ThreadID>
<Request.URL>https://bonnier.magazine-services.net:44314/CS/Account.aspx?accountid=3622083</Request.URL>
<Comment>Subscript =3420512 - Has an invalid state. The publication is ceased, but the subscription is not canceled.</Comment>
<ExceptionMessage>Issue with subscription: 3420512</ExceptionMessage>
</Entry>
<Entry>
<Type>Unknown</Type>
<DateTime>11/28/2017 11:19:49.652</DateTime>
<Level>Exception</Level>
<Host>CNTX-PROD-WEB-A</Host>
<ThreadID>139</ThreadID>
<Request.URL>https://bonnier.magazine-services.net:44314/CS/Account.aspx?accountid=3622083</Request.URL>
<Comment>Subscript =3420512 - Has an invalid state. The publication is ceased, but the subscription is not canceled.</Comment>
<ExceptionMessage>Issue with subscription: 3420512</ExceptionMessage>
</Entry>
"""#
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