import Foundation
let pattern = #"^\s*(?:<\?xml[^>]+>)?\s*<([^>]+?)>[\s\S]+?<\/\1>\s*?$"#
let regex = try! NSRegularExpression(pattern: pattern)
let testString = #"""
<?xml version="1.0" encoding="UTF-8"?>
<Recordings>
<Recording OVSTag="R00259003F89415063015030509" Name="test">
<Channel EndTC="15:03:59:10" BeginTC="15:03:05:22" Index="3"/>
<Clip UName="801" OVSTag="C00259003F89415063015394226" Name="test_sub_1">
<Channel OutPoint="15:03:20:19" InPoint="15:03:05:22" Default="true" Index="3"/>
<SmartEvent ID="b703578e-8dd1-6b72-c8c7-237132f66652"/>
<SmartEvent ID="9287112f-45a6-1f43-0c28-76111b1b710f"/>
<SmartEvent ID="a71c9fff-d1ae-7f89-5f1a-7a0a281f9904"/>
</Clip>
</Recording>
</Recordings>
<SmartEvents>
<SmartEvent PageID="f3e9e264-3f1a-0f15-814a-cc7c535c1251" ID="b703578e-8dd1-6b72-c8c7-237132f66652" Name="FOUL"/>
<SmartEvent PageID="bc3e8a3b-ea74-dad2-bd55-49a7d9725b83" ID="9287112f-45a6-1f43-0c28-76111b1b710f" Name="MESSI"/>
<SmartEvent PageID="d15ed885-b68b-69db-8d76-3dc21e47d1d1" ID="a71c9fff-d1ae-7f89-5f1a-7a0a281f9904" Name="RAMOS"/>
</SmartEvents>
<SmartEventPages>
<SmartEventPage ID="d15ed885-b68b-69db-8d76-3dc21e47d1d1" Name="Real Team"/>
<SmartEventPage ID="f3e9e264-3f1a-0f15-814a-cc7c535c1251" Name="Action"/>
<SmartEventPage ID="bc3e8a3b-ea74-dad2-bd55-49a7d9725b83" Name="Barcelona Team"/>
</SmartEventPages>
"""#
let stringRange = NSRange(location: 0, length: testString.utf16.count)
if let firstMatch = regex.firstMatch(in: testString, range: stringRange) {
let result: [String] = (1 ..< firstMatch.numberOfRanges).map { (testString as NSString).substring(with: firstMatch.range(at: $0)) }
print(result)
} else {
print("No matches were found.")
}
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