import Foundation
let pattern = #"""
(?={)(?(DEFINE)
(?<number> [0-9]+(?:\.[0-9]*)?(?:e[+-]?[0-9]+)?)
(?<string> \\" (?>[^"\\]+|\\\\(?:[^\\]|\\.))* \\" )
(?<boolean> true | false | null)
(?<pair> (?: \g<string> | \g<number>) \s* : \s*
(?: \g<string> | \g<number> | \g<boolean> | \g<json> | \g<array> ) )
(?<array> \[\s* \g<json> (?: \s*,\s* \g<json>)* \s*])
(?<json> { \s* \g<pair> (?:\s*,\s* \g<pair>)* })
)
\g<json>
"""#
let regex = try! NSRegularExpression(pattern: pattern, options: [.caseInsensitive, .allowCommentsAndWhitespace])
let testString = #""b<---------------->{\"status\":\"ok\",\"plugin_version\":\"1.2.6\",\"post\":{\"id\":7598,\"type\":\"post\",\"slug\":\"honeycrisp-apple-sangria-recipe\",\"url\":\"http:\\/\\/www.bigbigbutts.com\\/2013\\/08\\/honeycrisp-apple-sangria-recipe\\/\",\"status\":\"publish\",\"title\":\"Honeycrisp Apple Sangria Recipe\",\"title_plain\":\"Honeycrisp Apple Sangria Recipe\",\"content\":\"<div class=\\\"pin-it-btn-wrapper\\\"><a href=\\\"\\/\\/www.pinterest.com\\/pin\\/create\\/button\\/?url=http%3A%2F%2Fwww.bigbigbutts.com%2F2013%2F08%2Fhoneycrisp-apple-sangria-recipe%2F&media=http%3A%2F%2Fwww.bigbigbutts.com%2Fwp-content%2Fuploads%2F2013%2F08%2Fhoneycrisp-apple-sangria.jpg&description=Honeycrisp%20Apple%20Sangria%20Recipe\\\" data-pin-do=\\\"buttonBookmark\\\" data-pin-config=\\\"none\\\" rel=\\\"nobox\\\"><\\/a><\\/div>\",\"raw_content\":\"\",\"excerpt\":\"\",\"date\":\"2013-08-24T11:18:07+00:00\",\"modified\":\"2014-04-24T09:45:00+00:00\",\"author\":{\"id\":2,\"slug\":\"gia\",\"name\":\"gia\",\"first_name\":\"gia\",\"last_name\":\"Wenner chia\",\"nickname\":\"gia\",\"url\":\"http:\\/\\/giawennerchia.com\",\"description\":\"gia Wenner chia is a writer and mom who gets paid to obsess over Pinterest and blogs for Ahalogy, a Cincinnati-based startup. She lives in her hometown of West Chester, Ohio, with her husband, two young children, and their dog.\"},\"attachments\":[{\"id\":7599,\"url\":\"http:\\/\\/www.bigbigbutts.com\\/wp-content\\/uploads\\/2013\\/08\\/honeycrisp-apple-sangria.jpg\",\"slug\":\"honeycrisp-apple-sangria\",\"title\":\"honeycrisp-apple-sangria\",\"description\":\"\",\"caption\":\"\",\"parent\":7598,\"mime_type\":\"image\\/jpeg\",\"images\":{\"full\":{\"url\":\"http:\\/\\/www.bigbigbutts.com\\/wp-content\\/uploads\\/2013\\/08\\/honeycrisp-apple-sangria.jpg\",\"width\":580,\"height\":406},\"thumbnail\":{\"url\":\"http:\\/\\/www.bigbigbutts.com\\/wp-content\\/uploads\\/2013\\/08\\/honeycrisp-apple-sangria-150x150.jpg\",\"width\":150,\"height\":150},\"medium\":{\"url\":\"http:\\/\\/www.bigbigbutts.com\\/wp-content\\/uploads\\/2013\\/08\\/honeycrisp-apple-sangria-300x210.jpg\",\"width\":300,\"height\":210},\"large\":{\"url\":\"http:\\/\\/www.bigbigbutts.com\\/wp-content\\/uploads\\/2013\\/08\\/honeycrisp-apple-sangria.jpg\",\"width\":580,\"height\":406},\"Mini Square\":{\"url\":\"http:\\/\\/www.bigbigbutts.com\\/wp-content\\/uploads\\/2013\\/08\\/honeycrisp-apple-sangria-70x70.jpg\",\"width\":70,\"height\":70},\"Square\":{\"url\":\"http:\\/\\/www.bigbigbutts.com\\/wp-content\\/uploads\\/2013\\/08\\/honeycrisp-apple-sangria-115x115.jpg\",\"width\":115,\"height\":115},\"Featured Tabs\":{\"url\":\"http:\\/\\/www.bigbigbutts.com\\/wp-content\\/uploads\\/2013\\/08\\/honeycrisp-apple-sangria-150x225.jpg\",\"width\":150,\"height\":225}}}],\"featured_image\":{\"id\":7599,\"url\":\"http:\\/\\/www.bigbigbutts.com\\/wp-content\\/uploads\\/2013\\/08\\/honeycrisp-apple-sangria.jpg\",\"slug\":\"honeycrisp-apple-sangria\",\"title\":\"honeycrisp-apple-sangria\",\"description\":\"\",\"caption\":\"\",\"parent\":7598,\"mime_type\":\"image\\/jpeg\",\"images\":{\"full\":{\"url\":\"http:\\/\\/www.bigbigbutts.com\\/wp-content\\/uploads\\/2013\\/08\\/honeycrisp-apple-sangria.jpg\",\"width\":580,\"height\":406},\"thumbnail\":{\"url\":\"http:\\/\\/www.bigbigbutts.com\\/wp-content\\/uploads\\/2013\\/08\\/honeycrisp-apple-sangria-150x150.jpg\",\"width\":150,\"height\":150},\"medium\":{\"url\":\"http:\\/\\/www.bigbigbutts.com\\/wp-content\\/uploads\\/2013\\/08\\/honeycrisp-apple-sangria-300x210.jpg\",\"width\":300,\"height\":210},\"large\":{\"url\":\"http:\\/\\/www.bigbigbutts.com\\/wp-content\\/uploads\\/2013\\/08\\/honeycrisp-apple-sangria.jpg\",\"width\":580,\"height\":406},\"Mini Square\":{\"url\":\"http:\\/\\/www.bigbigbutts.com\\/wp-content\\/uploads\\/2013\\/08\\/honeycrisp-apple-sangria-70x70.jpg\",\"width\":70,\"height\":70},\"Square\":{\"url\":\"http:\\/\\/www.bigbigbutts.com\\/wp-content\\/uploads\\/2013\\/08\\/honeycrisp-apple-sangria-115x115.jpg\",\"width\":115,\"height\":115},\"Featured Tabs\":{\"url\":\"http:\\/\\/www.bigbigbutts.com\\/wp-content\\/uploads\\/2013\\/08\\/honeycrisp-apple-sangria-150x225.jpg\",\"width\":150,\"height\":225}}}}}<random shit><dafkdjkfjdaksf""#
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