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 = ##"[^<>](?![^<]*>|[^<>]*<\/)(?!\s\#\s)(\#\S[^<>](?![^<]*>|[^<>]*<\/)(.*?)\S\#)"##
let regex = try! NSRegularExpression(pattern: pattern, options: .anchorsMatchLines)
let testString = ##"""
With # : #Zhong Lun Law Firm#
With # : #Algeria’s new Investment Law#
With # : #中伦律师事务所#
With # : #Victor I-Hsiu Chang#
With # : #叶姝欐#
With # : #Nguyen Anh Tuan#
With # : #AnJie Law Firm#
With # : #锦天城律师事务所#
<section id="Capital" class="vantage-bg-grey">
<p id="Capital" class="DOTY_DOTY-Number" style="background-color: #ec1c24; color: #ffffff; font-weight: bold; font-size: 20px; padding: 5px; text-align: justify;"><a style="color: white;" href="#Capital"><u>CAPITAL MARKETS</u></a></p><section id="Capital" class="vantage-bg-grey">
<p id="Capital" class="DOTY_DOTY-Number" style="background-color: #ec1c24; color: #ffffff; font-weight: bold; font-size: 20px; padding: 5px; text-align: justify;"><a style="color: white;" href="#Capital"><u>CAPITAL MARKETS</u></a></p><section id="Capital" class="vantage-bg-grey">
<p id="Capital" class="DOTY_DOTY-Number" style="background-color: #ec1c24; color: #ffffff; font-weight: bold; font-size: 20px; padding: 5px; text-align: justify;"><a style="color: white;" href="#Capital"><u>CAPITAL MARKETS</u></a></p><section id="Capital" class="vantage-bg-grey">
<p id="Capital" class="DOTY_DOTY-Number" style="background-color: #ec1c24; color: #ffffff; font-weight: bold; font-size: 20px; padding: 5px; text-align: justify;"><a style="color: white;" href="#Capital"><u>CAPITAL MARKETS</u></a></p>
one <p>two</p> three <p class="test">four</p> five <a>six</a> seven <p> eight nine <p/> ten
<a style="text-decoration: none;" href="https://beta2.law.asia/china/china-top-lawyers-2022/"><button style="width: 100%; font-size: 18px; letter-spacing: 1px; padding: 14px 20px; color: #666; border-color: #F4F4F4; background-color: #fff; background-image: linear-gradient(to bottom,rgba(0,0,0,.01) 0,rgba(0,0,0,.02) 100%); background-repeat: repeat-x; border-radius: 5px; a: hover{background-color:#000;"><span style="color: #c94f3f; font-weight: bold; text-transform: uppercase;">China</span></button> </a>
[vc_column_text]<a style="text-decoration: none;" href="https://beta2.law.asia/asia/lawyers/singapore-lawyers/"><button style="width: 100%; font-size: 18px; letter-spacing: 1px; padding: 14px 20px; color: #666; border-color: #F4F4F4; background-color: #fff; background-image: linear-gradient(to bottom,rgba(0,0,0,.01) 0,rgba(0,0,0,.02) 100%); background-repeat: repeat-x; border-radius: 5px; a: hover{background-color:#000;"><span style="color: #c94f3f; font-weight: bold; text-transform: uppercase;">Singapore</span></button> </a>[/vc_column_text][/vc_column][vc_column width="1/2"][vc_column_text]
[vc_column_text]<a style="text-decoration: none;" href="https://beta2.law.asia/asia/lawyers/singapore-lawyers/"><span style="color: #c94f3f; font-weight: bold; text-transform: uppercase;">Singapore</span></a>[/vc_column_text][/vc_column][vc_column width="1/2"][vc_column_text]
<a href="https://beta2.law.asia/law-firm/drew-napier/">Drew & Napier</a><br>
Drew & Napier<br>
<a href="https://beta2.law.asia/law-firm/allen-overy/">Allen & Overy</a><br>
Allen & Overy<br>
<a href="https://beta2.law.asia/asia/">Robert Hasan</a><br>
Robert Hasan<br>
华进律师事务所<br>
华进律师事务所<br>
<a href="https://beta2.law.asia/law-firm/deep-far-attorneys-at-law/">Deep & Far</a><br>
Deep & Far
#<a href="https://beta2.law.asia/law-firm/drew-napier/">Drew & Napier</a>#
"""##
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