import Foundation
let pattern = #"((@[\w\d][\w\d_]+)\s+)?(\.[\w\d][\w\d_]+\s+)"#
let regex = try! NSRegularExpression(pattern: pattern, options: .anchorsMatchLines)
let testString = #"""
@array .byte 3, 4, 23
va1 .byte 'A', -3, 0xAB // Three bytes
@str1 .byte "Enter an integer: " // Null-terminated string
@var2 .hword 0xABCD:10 // 0xABCD is replicated 10 times
@var3 .word -18, 5.7E-3 // 4-byte integer, single float
@var4 .dword 21, 21.0 // 8-byte integer, double float
//Assembly Language Syntax:
J @label // Jump @label
JAL @label // R31 = (PC+4); Jump @label
The JAL instruction saves the return address
"""#
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