import Foundation
let pattern = #"(\\u001b)(8|7|H|>|\[(\?\d+(h|l)|[0-2]?(K|J)|\d*(A|B|C|D\D|E|F|G|g|i|m|n|S|s|T|u)|1000D\d+|\d*;\d*(f|H|r|m)|\d+;\d+;\d+m))"#
let regex = try! NSRegularExpression(pattern: pattern)
let testString = #"""
\u001b7 \u001b8 \u001bH \u001b>
\u001b[K \u001b[0K \u001b[J \u001b[2J
\u001b[10A \u001b[10B \u001b[10C \u001b[10D \u001b[10E \u001b[10F
\u001b[10S \u001b[10T \u001b[10G \u001b[8C \u001b[s \u001b[u \u001b[1000D22
\u001b[999;999H \u001b[1;1H \u001b[1;1f \u001b[1;24r
\u001b[6n \u001b[5i \u001b[4i \u001b[3g
\u001b[?7h \u001b[?25h \u001b[?25l
\u001b[0m
\u001b[31m \u001b[41m
\u001b[1m \u001b[4m \u001b[5m \u001b[7m \u001b[8m
\u001b[31;1m \u001b[41;1m
\u001b[38;5;255m \u001b[48;5;255m
"""#
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