import Foundation
// WARNING: You included a flag that Swift doesn't support: u
// When this flag is set, it makes the pattern and subject strings to be treated as unicode.
// Swift already treats the pattern and subject strings as unicode by default, so including this flag is redundant.
let pattern = #"(?s)(?<=start).*?(?=end)"#
let regex = try! NSRegularExpression(pattern: pattern, options: [.anchorsMatchLines, .caseInsensitive])
let testString = #"""
Match all characters between two strings with dotall mode to match across line breaks
Duis sem mi, rhoncus ut enim quis, ultricies posuere libero.
Etiam et euismod dolor, at ornare lorem.
Praesent iaculis pellentesque felis, sit amet interdum ex ultricies id.
Nam eu mattis nisi.
Sed et odio risus.
Proin fermentum in justo non consequat.
Pellentesque pellentesque augue sed erat porta gravida.
In a magna at metus suscipit sodales non eget massa.
Maecenas eu turpis non nisl semper ultricies.
Duis rhoncus imperdiet sapien, vitae posuere erat tempor id.
Vestibulum in enim fermentum purus tempor maximus tempus quis ex.
Maecenas vitae felis ac elit semper blandit.
Suspendisse neque eros, vestibulum nec ultrices at, sagittis eget ex.
Aenean feugiat libero nunc, sit amet commodo turpis tristique luctus.
Sed sodales diam at urna viverra, nec ultrices enim imperdiet.
startLorem ipsum dolor sit amet, consectetur adipiscing elit.
Nulla velit diam, vehicula eget nunc at, aliquet mattis velit.
Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
Nam quis sollicitudin augue.
Maecenas a auctor nibh.
Pellentesque aliquam nulla sit amet posuere laoreet.
Nunc lorem massa, vehicula ac vehicula ac, varius vel est.
Proin sed mattis dolor.
Cras quis enim non nisl ultrices rhoncus in ut nisl.
endCurabitur venenatis ullamcorper ullamcorper.
Praesent in mi non mi bibendum lobortis at vel est.
Mauris luctus varius justo, non rhoncus sem tristique quis.
Aenean ac metus commodo felis pharetra dapibus.
Integer hendrerit, enim ac varius sagittis, ipsum lacus euismod elit, sed sagittis tortor purus nec sapien.
Morbi luctus risus quam, nec imperdiet nibh pulvinar id.
Pellentesque pretium posuere ligula, id ullamcorper sapien placerat at.
Nulla mattis tristique nisi id ornare.
Cras at orci magna.
Praesent interdum id est vitae feugiat.
Praesent vulputate, tortor at eleifend venenatis, leo turpis malesuada mauris, non lobortis urna velit fringilla lacus.
"""#
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