import Foundation
let pattern = #"^(.*)%%sql\s+-o\s+(\w+)\s+(\-([n|q|r])(\s+[a-z0-9]+)?)?\s?(\\n)?\s?select\s+(.+)\s+from([\w\s\.\-'\"=]+)(\\n)?(.*)$"#
let regex = try! NSRegularExpression(pattern: pattern, options: .anchorsMatchLines)
let testString = ##"""
\n//something \nimport com.adobe.platform.dataset.DataSetOptions\n\nvar df1 = spark.read.format(\"com.adobe.platform.dataset\")\n .option(DataSetOptions.orgId, \"310C6D375BA5248F0A494212@AdobeOrg\")\n .option(DataSetOptions.batchId, \"dbe154d3-197a-4e6c-80f8-9b7025eea2b9\")\n .load(\"5e68141134492718af974844\")\n\ndf1.printSchema()\ndf1.show()\n// this should be changed\n%%sql -o df -n 30 \nselect * from sparkdf where sparkdf.x='something'\n// # and this line not\n \n\n//import com.adobe.platform.dataset.DataSetOptions\n\nvar userToken = spark.sparkContext.getConf.getOption(\"spark.yarn.appMasterEnv.USER_TOKEN\").get\nvar serviceToken = spark.sparkContext.getConf.getOption(\"spark.yarn.appMasterEnv.SERVICE_TOKEN\").get\nvar serviceApiKey = spark.sparkContext.getConf.getOption(\"spark.yarn.appMasterEnv.SERVICE_API_KEY\").get\n\ndf1.write.format(\"com.adobe.platform.dataset\")\n .option(DataSetOptions.orgId, \"310C6D375BA5248F0A494212@AdobeOrg\")\n .option(DataSetOptions.userToken, userToken)\n .option(DataSetOptions.serviceToken, serviceToken)\n .option(DataSetOptions.serviceApiKey, serviceApiKey)\n .save(\"5e68141134492718af974844\")\n// \n\n//end
"""##
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