import Foundation
let pattern = #"(PostgreSQL (?P<psql_major>\d{1,2})\.(?P<psql_minor>\d{1,2})(?P<psql_opt_patch>\.\d{1,2})?, )?Aurora PostgreSQL release (?P<aurora_psql_major>\d{1,2})\.(?P<aurora_psql_minor>\d{1,2})(?P<aurora_psql_opt_patch>\.\d{1,2})?(?P<release_or_deprecation>\,\s(?P<release_data>.*)|\s\(Deprecated on (?P<deprecation_date>.*)\))?"#
let regex = try! NSRegularExpression(pattern: pattern, options: .anchorsMatchLines)
let testString = #"""
PostgreSQL 12.6, Aurora PostgreSQL release 4.1 (Deprecated on July 15, 2022)
PostgreSQL 12.4, Aurora PostgreSQL release 4.0 (Deprecated on July 15, 2022)
Aurora PostgreSQL release 14.3.1, July 6, 2022
PostgreSQL 9.6.8, Aurora PostgreSQL release 1.2 (Deprecated on October 28, 2021)
PostgreSQL 9.6.8, Aurora PostgreSQL release 1.2.4
PostgreSQL 14.5, Aurora PostgreSQL release 1.2
Aurora PostgreSQL release 14.3.1, Deprecated on October 28, 2021)
"""#
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