import Foundation
let pattern = ##"\[([A-G][#b]?(maj|m)?[27]?(add|aug|dim|sus)?[2-9]?)\]"##
let regex = try! NSRegularExpression(pattern: pattern)
let testString = #"""
[Am7], [C6]
[C7]
[Cmaj7]
[C]
[Fadd9]
[C7sus4]
[Csus4], [Fsus2]
[A7]
[Edim]
[A9], [Em6]
[Dbdim]
[Eb9]
[Gdim]
[A7sus4]
[C9], [Gm6]
[Em7], [G6]
[Bb6], [Gm7]
[G7]
[G7sus4]
[Gmaj7]
[Dsus4], [Gsus2]
[Gm]
[G]
[Csus2], [Gsus4]
[Ebadd9]
[Eb]
[Ebaug], [Gaug]
[Cm]
[Em9]
[Cadd9]
[Abaug], [Caug], [Eaug]
[Fm]
[Amaj7]
[Dbm6], [Gb9]
[Dbm7]
[Bbm7], [Db6]
[Db7]
[Db]
[Gbadd9]
[Gbsus2]
[E7]
[Bb7]
[Abdim], [Fdim]
[Fm6]
[Gbm9]
[Bm6], [E9]
[Emaj7]
[Dbm9]
[Bb7sus4]
[Db9]
[Ab6], [Fm7]
[Dbadd9]
[Abm7], [B6]
[Ab7]
[Ab7sus4]
[Abmaj7]
[Absus2]
[Absus4]
[E]
[Eadd9]
[Am]
[Am9]
[F]
[Am6]
[A]
[Aadd9], [Bm9]
[Dbaug], [Faug]
[Aaug]
[A6], [Gbm]
[Gbm6]
[Asus4], [Dsus2]
[Dm]
[Dm6], [G9]
[Dm7], [F6]
[D]
[Bm7], [D6]
[D7]
[Dmaj7]
[Gm9]
[D7sus4]
[F7]
[Ebdim]
[B7]
[Adim], [Gbdim]
[Cm6], [F9]
[Fmaj7]
[B7sus4]
[D9]
[Gbm7]
[Bbsus2], [Fsus4]
[Bbdim]
[Bbm]
[Bbm9]
[Gb]
[Bbm6]
[Bbmaj7]
[Bb]
[Bbadd9]
[Bbaug], [Daug], [Gbaug]
[Bb9]
[Bbsus4]
[Ebm]
[Ab9], [Ebm6]
[Ebm7], [Gb6]
[Cm7], [Eb6]
[Eb7]
[Abadd9]
[Ebsus2]
[Gb7]
[Bsus2], [Gbsus4]
[Bdim]
[Bm]
[Bmaj7]
[B]
[Badd9]
[Baug]
[Abm]
[Bsus4], [Esus2]
[E6]
"""#
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