import Foundation
let pattern = #"""
url
(\(
(?P<url>(?:[^()]*|(?1))+)
\))
"""#
let regex = try! NSRegularExpression(pattern: pattern, options: [.anchorsMatchLines, .allowCommentsAndWhitespace])
let testString = ##"""
/* 2019-07-03 13:38:44 */
background:url(/uploads/2019/03/0002-image(thumbnail_product).jpg)
@charset "UTF-8";@font-face{font-family:lato_blackregular;src:url("../../Common/common/fonts/lato/lato-black-webfont.eot");src:url("../../Common/common/fonts/lato/lato-black-webfont.eot?#iefix") format("embedded-opentype"),url("../../Common/common/fonts/lato/lato-black-webfont.woff") format("woff"),url("../../Common/common/fonts/lato/lato-black-webfont.ttf") format("truetype"),url("../../Common/common/fonts/lato/lato-black-webfont.svg?#lato_blackregular") format("svg");font-weight:400;font-style:normal}@font-face{font-family:latobold;src:url("../../Common/common/fonts/lato/lato-bold-webfont.eot");src:url("../../Common/common/fonts/lato/lato-bold-webfont.eot?#iefix") format("embedded-opentype"),url("../../Common/common/fonts/lato/lato-bold-webfont.woff") format("woff"),url("../../Common/common/fonts/lato/lato-bold-webfont.ttf") format("truetype"),url("../../Common/common/fonts/lato/lato-bold-webfont.svg?#latobold") format("svg");font-weight:400;font-style:normal}@font-face{font-family:latoregular;src:url("../../Common/common/fonts/lato/lato-regular-webfont.eot");src:url("../../Common/common/fonts/lato/lato-regular-webfont.eot?#iefix") format("embedded-opentype"),url("../../Common/common/fonts/lato/lato-regular-webfont.woff") format("woff"),url("../../Common/common/fonts/lato/lato-regular-webfont.ttf") format("truetype"),url("../../Common/common/fonts/lato/lato-regular-webfont.svg?#latoregular") format("svg");font-weight:400;font-style:normal}@font-face{font-family:latolight;src:url("../../Common/common/fonts/lato/lato-light-webfont.eot");src:url("../../Common/common/fonts/lato/lato-light-webfont.eot?#iefix") format("embedded-opentype"),url("../../Common/common/fonts/lato/lato-light-webfont.woff") format("woff"),url("../../Common/common/fonts/lato/lato-light-webfont.ttf") format("truetype"),url("../../Common/common/fonts/lato/lato-light-webfont.svg?#latoregular") format("svg");font-weight:400;font-style:normal}@font-face{font-family:lato_lightregular;src:url("../../Common/common/fonts/lato/lato-light-webfont.eot");src:url("../../Common/common/fonts/lato/lato-light-webfont.eot?#iefix") format("embedded-opentype"),url("../../Common/common/fonts/lato/lato-light-webfont.woff") format("woff"),url("../../Common/common/fonts/lato/lato-light-webfont.ttf")
"""##
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