import Foundation
let pattern = #"[*][(][\s]*[(\s]*.*[*][)\s]*(.*)\s*[)]\s*=(.*)[\s]*;"#
let regex = try! NSRegularExpression(pattern: pattern, options: [.caseInsensitive, .allowCommentsAndWhitespace])
let testString = #"""
(*((volatile unsigned short*)(type01_01_06_base + (type01_01_06_offset * 1))) = (unsigned short)(unsigned long)0x01010101);
(*((volatile unsigned short*)(type01_01_06_base + (type01_01_06_offset * 2))) = (unsigned short)(unsigned long)0x01000100);
(*((volatile unsigned char*)add)) = (unsigned char)data;
(*((volatile unsigned short*)add)) = (unsigned short)data;
(*((volatile unsigned long*)add)) = (unsigned long)data;
*((volatile unsigned char*)0x01010004) = (unsigned char)0x01;
*((volatile unsigned char*)0x01010008) = (unsigned char)0x00;
*((volatile unsigned short*)0x01020004) = (unsigned short)0x0100;
*((volatile unsigned short*)0x01020008) = (unsigned short)0x0000;
*((volatile unsigned long*)(0x01030000 + 0x04)) = (unsigned long)0x00010000;
*((volatile unsigned long*)(0x01030000 + 0x08)) = (unsigned long)0x00000000;
(*((volatile unsigned char*)type01_01_04o_add) = (unsigned char)(unsigned char)0xA5);
(*((volatile unsigned char*)type01_01_04n_add) = (unsigned char)(unsigned char)0x5A);
(*((volatile unsigned short*)(type01_01_05_base + type01_01_05o_offset)) = (unsigned short)(unsigned short)0x0101);
(*((volatile unsigned short*)(type01_01_05_base + type01_01_05n_offset)) = (unsigned short)(unsigned short)0x0100);
*((volatile unsigned char*)0x02010004) = (unsigned char)0x04;
*((volatile unsigned char*)0x02010008) = (unsigned char)0x05;
*((volatile unsigned short*)0x02020004) = (unsigned short)0x0400;
*((volatile unsigned short*)0x02020008) = (unsigned short)0x0500;
*((volatile unsigned long*)0x02030004) = (unsigned long)(0x00030000 + 0x00010000);
*((volatile unsigned long*)0x02030008) = (unsigned long)(0x00030000 + 0x00020000);
(*((volatile unsigned char*)0x02040004) = (unsigned char)(unsigned char)(0x0A - 0x02));
(*((volatile unsigned char*)0x02040008) = (unsigned char)(unsigned char)(0x0A - 0x01));
(*((volatile unsigned short*)0x02050004) = (unsigned short)(unsigned short)(0x0001 << 11));
(*((volatile unsigned short*)0x02050008) = (unsigned short)(unsigned short)(0x0001 << 12));
(*((volatile unsigned long*)0x02060004) = (unsigned long)(unsigned long)(0x80000000 | 0x00080000));
(*((volatile unsigned long*)0x02060008) = (unsigned long)(unsigned long)(0x80000000 | 0x00800000));
"""#
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