import Foundation
let pattern = #"(//[^\n]+)|(/\*.*?\*/)"#
let regex = try! NSRegularExpression(pattern: pattern)
let testString = ##"""
#define MC2
#define MC1
# ifndef MCTEST
#define MCTEST
#ifdef MC1
#define data1 0x20
/*cmment start*/#define /*this is comment*/ data2 2.5f
#define date3 L"this is a data"
#define data4 true
#ifdef MC2
#define data5 'a'
#define data6 { {2.0, "abc"}, {1.5, "def"}, {5.6f, "7.2"}} // ¸¡µãÓë×Ö·û´®×é³ÉµÄ½á¹¹Ìå³õʼ»¯¾ÛºÏ£¬ ÔÙ½øÒ»²½¾ÛºÏ×é³ÉÁËÊý×é
#else //else MC2
# define data5 {5.0, 7.5, 3.8}
#define data6 'c'
#endif //end MC2
#ifdef MC3
//¼ÙifǶÌ×£¬ÓÃÓÚ²âÊÔ£¬ÔÚÓ¦¸Ã±»ºöÂÔµÄÇé¿öÏ£¬#endifµÄ¼æÈÝÇé¿ö
#endif //end MC3
#else//else MC1
"//ccc"
"/*bbb*/"
"/**/"
//"//bbb"
/*"jjjjj"*/
#define data1 1.0f /* this is float
may be changed
*/
#define data2 2
#define date3 false
#define data4 "this is a data"
#ifdef MC2
#define data5 'B'
#define data6 {1, 6, 3}
#define data7 0xa
#else//else MC2
#define data5 'D'
#define data6 {1, 6}
#endif //end MC2
#endif //MC1
#ifdef MC2
#undef MC2
#endif
/*ÔÚ¶àÐÐ×¢ÊͺóÃæ½ô¸úÒ»¸öµ¥ÐÐ×¢ÊÍ*///½ô¸úµÄµ¥ÐÐ×¢ÊÍ
#endif // !MC_TEST
"""##
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