import Foundation
let pattern = #"^=\?UTF-8\?Q\?(?=.*=E.=..=..)(?=.*[^=]*)?.*\?="#
let regex = try! NSRegularExpression(pattern: pattern, options: [.anchorsMatchLines, .caseInsensitive])
let testString = #"""
=?UTF-8?q?=E5=8F=A3=E5=BA=A7=E6=83=85=E5=A0=B1=E7=A2=BA=E8=AA=8D=E3=81=AE?=
=?UTF-8?q?ANA=E3=83=9E=E3=82=A4=E3=83=AC=E3=83=BC=E3=82=B8=E3=82=AF?=
=?UTF-8?q?=E3=81=84=E3=80=91ANA=E3=83=9E=E3=82=A4=E3=83=AC=E3=83=BC?=
=?UTF-8?q?=E3=80=90=E3=81=94=E7=A2=BA=E8=AA=8D=E3=81=8F=E3=81=A0=E3=81=95?=
=?UTF-8?q?=E3=81=84=E3=80=91ANA=E3=83=9E=E3=82=A4=E3=83=AC=E3=83=BC?=
=?UTF-8?q?=E3=82=B8=E3=82=AF=E3=83=A9=E3=83=96=EF=BC=9A=E6=9C=AA=E5=8A=A0?=
=?UTF-8?q?=E7=AE=97=E3=83=9E=E3=82=A4=E3=83=AB=E3=81=AE=E6=89=8B=E7=B6=9A?=
=?UTF-8?q?=E3=81=8D=E6=A1=88=E5=86=85=EF=BC=88=E3=83=A1=E3=83=BC=E3=83=AB?=
=?UTF-8?q?=E7=95=AA=E5=8F=B7:CF-FC-01194167741=EF=BC=89?=
=?UTF-8?q?=E5=8F=A3=E5=BA=A7=E5=8F=96=E5=BC=95=E5=88=B6=E9=99=90=E3=81=AE?=
=?UTF-8?q?=E3=81=94=E6=A1=88=E5=86=85=EF=BC=9A=E3=82=AA=E3=83=AA=E3=82=B3?=
=?UTF-8?q?=E6=83=85=E5=A0=B1=E3=82=92=E6=9B=B4=E6=96=B0=E3=81=97=E3=81=A6?=
=?UTF-8?q?=E3=81=8F=E3=81=A0=E3=81=95=E3=81=84=E2=97=89PU-89581655388?=
=?UTF-8?q?hello?=
"""#
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