import Foundation
let pattern = #"(?<=\bdestination\s\/\S+\/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:)(?:2[89][0-9]{3}|3[01][0-9]{3}|32[0-6][0-9]{2}|327[0-5][0-9]|6[5-9][0-9]{3}|65[0-4][0-9]{2}|6553[0-5]|(?:22|53|68|323|500|1067|2379|2380|4500|5355|6443|8005|8007|8087|8443|8444|8505|8507|9007|9090|9153|9999|10249|10250|10251|10252|10256|10257|10259|18091|18092|18093|18095|22222|23790|23791|23801|23802))"#
let regex = try! NSRegularExpression(pattern: pattern, options: .anchorsMatchLines)
let testString = #"""
ltm virtual /Common/byoadc-VIP {
description mylistener.byoadc.com
destination /Common/157.109.110.76:28010
ip-protocol tcp
last-modified-time 2023-04-15:13:23:53
mask 255.255.255.255
pool /Common/SSLSUPPORT-POOL
profiles {
/Common/byoadc_2024 {
context clientside
}
/Common/http { }
/Common/tcp { }
}
ltm virtual /Microsoft-Exchange/pool-int-dns-tcp-53 {
destination /Microsoft-Exchange/10.175.99.145:53
ip-protocol tcp
mask 255.255.255.255
pool /Microsoft-Exchange/pool-int-dns-53
profiles {
/Common/tcp { }
}
"""#
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