import Foundation
// WARNING: You included a flag that Swift doesn't support: U
// When this flag is set, it inverts the "greediness" of the quantifiers so that they are not greedy by default, but become greedy if followed by '?'.
// As an alternative, this effect can also be achieved by setting a (?U) modifier setting within the pattern or by a question mark behind a quantifier (e.g. .*?).
let pattern = #"<article(?: class="lead")?><a href=".*" target="_top"><img(?: height=".*")? src="(.*)"(?: width=".*")? \/><\/a><h[1,2]><a href="(.*)" target="_top">(.*)<\/a><\/h[1,2]><small>By .*<\/small><small>Updated: (.*) - (.*)<\/small><div class="clear"><\/div><\/article>"#
let regex = try! NSRegularExpression(pattern: pattern)
let testString = #"<section class="news"><article class="lead"><a href="/2016/04/15/what-are-the-10-most-intriguing-games-of-the-2016-nfl-season/a6ikhoo/" target="_top"><img src="/_internal/cimg!0/8p7xcgnjxaoqjj4iwxfv1qlid4ag0mm" /></a><h1><a href="/2016/04/15/what-are-the-10-most-intriguing-games-of-the-2016-nfl-season/a6ikhoo/" target="_top">What are the 10 most intriguing games of the 2016 NFL season?</a></h1><small>By NATE ATKINS and ARTHUR ARKUSH</small><small>Updated: April 15, 2016 - 9:08 am</small><div class="clear"></div></article><div class="clear"></div></section><div class="bigbox ad"></div><section class="news secondary"><article><a href="/2016/04/08/green-bay-packers-cut-ilb-nate-palmer-10-game-starter-in-2015/afybdi5/" target="_top"><img height="225" src="/_internal/cimg!0/pes2uiv39y78ld1yezq38oqcz3invi8" width="400" /></a><h2><a href="/2016/04/08/green-bay-packers-cut-ilb-nate-palmer-10-game-starter-in-2015/afybdi5/" target="_top">Green Bay Packers cut ILB Nate Palmer, 10-game starter in 2015</a></h2><small>By ARTHUR ARKUSH -- aarkush@profootballweekly.com</small><small>Updated: April 8, 2016 - 4:01 pm</small><div class="clear"></div></article><article><a href="/2016/04/08/jacksonville-jaguars-aaron-colvin-and-green-bay-packers-demetri-goodson-suspended-4-games-each-for-peds/ahkwuh8/" target="_top"><img height="225" src="/_internal/cimg!0/5jn3lvqyt16zr6tg7yqrhsavrr3eh45" width="400" /></a><h2><a href="/2016/04/08/jacksonville-jaguars-aaron-colvin-and-green-bay-packers-demetri-goodson-suspended-4-games-each-for-peds/ahkwuh8/" target="_top">Jacksonville Jaguars' Aaron Colvin and Green Bay Packers' Demetri Goodson suspended 4 games each for PEDs</a></h2><small>By ARTHUR ARKUSH -- aarkush@profootballweekly.com</small><small>Updated: April 8, 2016 - 3:23 pm</small><div class="clear"></div></article></section>"#
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