import Foundation
let pattern = #"^(?=\s*<dd3:[^>]*>).*?>([^< ]+)<"#
let regex = try! NSRegularExpression(pattern: pattern, options: .anchorsMatchLines)
let testString = #"""
PUT /mg/co.xml HTTP/1.1
Host: 19.16.7.59
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:31.0) Gehko/20100101 Firefox/31.0
<?xml version="1.0" encoding="UTF-8"?>
<!-- THIS DATA SUBJECT TO DISCLAIMER(S) INCLUDED WITH THE PRODUCT OF ORIGIN. -->
<io:zzzz xmlns:io="http://kfj/ledm/iomgmt/2008/11/30" xmlns:dd="http://jkfhkj/dictionaries/1.0/" xmlns:dd3="http://jfja/dictionaries/2009/04/06" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jcjhjk/ledm/iomgmt/2008/11/30 ../../schemas/gfjbj.xsd">
<io:aaaa>
<dd3:bbbb>hjgjg</dd3:bbbb>
</io:aaaa>
<io:ccccc>
<io:dddd>
<dd3:ffff>15.34.2.5</dd3:ffff>
</io:dddd>
<io:eeee>
<dd3:gggg>67</dd3:gggg>
</io:eeee>
<io:iiii>
<dd3:jjjj><script>jgfjkgkj</script></dd3:jjjj>
</io:iiii>
</io:cccc>
</io:zzzz>
"""#
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