import Foundation
let pattern = #"("FILENAME" "([^\/:*?"<>|]+)")"#
let regex = try! NSRegularExpression(pattern: pattern, options: .anchorsMatchLines)
let testString = #"130 (UID 1245 BODYSTRUCTURE ((("TEXT" "PLAIN" ("CHARSET" "UTF-8") NIL NIL "QUOTED-PRINTABLE" 847 17 NIL NIL NIL)("TEXT" "HTML" ("CHARSET" "UTF-8") NIL NIL "QUOTED-PRINTABLE" 2009 41 NIL NIL NIL) "ALTERNATIVE" ("BOUNDARY" "000000000000929e4505d59042b1") NIL NIL)("IMAGE" "JPEG" ("NAME" "BS_01.jpg") "<f_kyetquhw1>" NIL "BASE64" 280364 NIL ("ATTACHMENT" ("FILENAME" "BS_(01)_a.jpg")) NIL)("IMAGE" "PNG" ("NAME" "payroll_check_top_format.png") "<f_kyetquio3>" NIL "BASE64" 498210 NIL ("ATTACHMENT" ("FILENAME" "payroll check top format.png")) NIL)("IMAGE" "JPEG" ("NAME" "missouri_dl_3e_1300x884.jpg") "<f_kyetquia2>" NIL "BASE64" 1014040 NIL ("ATTACHMENT" ("FILENAME" "missouri_dl_3e_1300x884.jpg")) NIL)("IMAGE" "JPEG" ("NAME" "1040-1-1_N.jpg") "<f_kyetquhj0>" NIL "BASE64" 4272596 NIL ("ATTACHMENT" ("FILENAME" "1040-1-1_N.jpg")) NIL) "MIXED" ("BOUNDARY" "000000000000929e4705d59042b3") NIL NIL))"#
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