import Foundation
let pattern = #"(?:{{(?:(\d?\-?\d?)(:=?)('[^']*'),*).*?}})"#
let regex = try! NSRegularExpression(pattern: pattern)
let testString = #"""
0:'ingen',1:'menneske',2:'mennesker'
0:='ingen',-1:'fugl'
1:'cola',2-:'colar'
0:='ingen',0:'biler',1:'bil',2:'biler',3-:'bøller'
{{0:'ingen',1:'menneske',2:'mennesker'}}
{{0-2:='ingen',0-1:'fugl'}}
{{1:'cola',2-:'colar'}}
{{0:='ingen',0:'biler',1:'bil',2:'biler',3-:'bøller'}}
Single ${{var}}
Vi er ${{var_U}}{{0:'ingen',1:'menneske',2:'mennesker'}}
Der er en ${{var_1}}{{0:='ingen',0-1:'fugl'}}
Gi' mig ${{var}}{{1:'cola',2-:'colar'}}
Jeg har ${{var}}{{0:='ingen',0:'biler',1:'bil',2:'biler',3-:'bøller'}}
\$\{\{(.+)\}\}\{\{((\d)(\-)?(\d)?(:(=)?)\'(.+)\'),?\}\}
\${{([A-Za-z\_\d]+)}}((?:{{)?((\d-?\d?)(:=?)\'(.*?)\'),?(?:}})?)?
\${{(?P<var>[A-Za-z09_]+)}}({{(?:(?P<factorL>\d)?(?P<diff>\-)?(?P<factorH>\d)?(?P<assert>:=?)(\'(?P<string>.+?)\')+?)?}})?
{{([A-Za-z0-9_]+)}}(?:{{((\d?\-?\d?)(:=?)('.+?'),?)+}})?
"""#
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