import Foundation
let pattern = #"(?>\<\!--begin(?<type>\w+)--\>)(?<embed>.+)(?>\<\!--end(?>\1)--\>)"#
let regex = try! NSRegularExpression(pattern: pattern, options: .anchorsMatchLines)
let testString = ##"""
<p><!--beginTweet--></p><blockquote class="twitter-tweet"><p dir="ltr" lang="en">The <a href="https://twitter.com/hashtag/SeaKraken?src=hash&ref_src=twsrc%5Etfw">#SeaKraken</a> & <a href="https://twitter.com/ClimateArena?ref_src=twsrc%5Etfw">@ClimateArena</a> will require all guests, ages 12+, attending Kraken games, concerts & events at Climate Pledge Arena to provide proof of vaccination to keep fans, staff, players & artists safe.<br><br>More info → <a href="https://t.co/f2EmV5cXd0">https://t.co/f2EmV5cXd0</a> <a href="https://t.co/wJY9ElJ0DQ">pic.twitter.com/wJY9ElJ0DQ</a></p>— Seattle Kraken (@SeattleKraken) <a href="https://twitter.com/SeattleKraken/status/1435273531256885255?ref_src=twsrc%5Etfw">September 7, 2021</a></blockquote><p><!--endTweet--></p>
<!--beginFart-->df<!--endFart-->
"""##
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