import Foundation
let pattern = #"(?<=(ch-name">)|(?<=ch-time">)|(?<=ch-type">)|(?<=ch-text">))[\s\S]*?(?=<\/)"#
let regex = try! NSRegularExpression(pattern: pattern)
let testString = #"""
<ul id="channelList">
<li class="odd">
<span class="ch-type">Canlı</span><!-- 1-->
<span class="ch-time">06:30</span><!-- 2-->
<div class="ch-desc">
<span class="ch-name">NBA TV</span><!-- 3-->
<span class="ch-text">Sacramento Kings - N.Orleans Pelicans (Basketbol)</span><!-- 4-->
</div>
</li>
<li class="even">
<span class="ch-type">Canlı</span>
<span class="ch-time">07:45</span>
<div class="ch-desc">
<span class="ch-name">TRT Spor</span>
<span class="ch-text">İlk Baskı (Futbol)</span>
</div>
</li>
<li class="odd">
<span class="ch-type">Canlı</span>
<span class="ch-time">11:00</span>
<div class="ch-desc">
<span class="ch-name">TRT Spor</span>
<span class="ch-text">Spor Manşet (Futbol)</span>
</div>
</li>
<li class="even">
<span class="ch-type">Canlı</span>
<span class="ch-time">11:05</span>
<div class="ch-desc">
<span class="ch-name">NTV Spor</span>
<span class="ch-text">Spor Servisi (Futbol)</span>
</div>
</li>
<li class="odd">
<span class="ch-type">Canlı</span>
<span class="ch-time">12:15</span>
<div class="ch-desc">
<span class="ch-name">TRT Spor</span>
<span class="ch-text">Set-Maç-Smaç (Voleybol)</span>
</div>
</li>
<li class="even">
<span class="ch-type">Canlı</span>
<span class="ch-time">13:00</span>
<div class="ch-desc">
<span class="ch-name">Kanal 58</span>
<span class="ch-text">Sivas Bld. - Pendikspor (Futbol)</span>
</div>
</li>
<li class="odd">
<span class="ch-type">Canlı</span>
<span class="ch-time">13:00</span>
<div class="ch-desc">
<span class="ch-name">Kardelen TV</span>
<span class="ch-text">BB Erzurumspor - Zonguldak (Futbol)</span>
</div>
</li>
<li class="even">
<span class="ch-type">Canlı</span>
<span class="ch-time">14:00</span>
<div class="ch-desc">
<span class="ch-name">Lig Tv</span>
<span class="ch-text">Futbol Gündemi (Futbol)</span>
</div>
</li>
<li class="odd">
<span class="ch-type">Canlı</span>
<span class="ch-time">14:00</span>
<div class="ch-desc">
<span class="ch-name">NTV Spor</span>
<span class="ch-text">Spor Aktüel (Futbol)</span>
</div>
</li>
<li class="even">
<span class="ch-type">Canlı</span>
<span class="ch-time">20:00</span>
<div class="ch-desc">
<span class="ch-name">Tivibu Spor</span>
<span class="ch-text">Doğru Taktik (Futbol)</span>
</div>
</li>
<li class="odd">
<span class="ch-type">Canlı</span>
<span class="ch-time">20:00</span>
<div class="ch-desc">
<span class="ch-name">NTV Spor</span>
<span class="ch-text">Kırmızı Çizgi (Futbol)</span>
</div>
</li>
<li class="even">
<span class="ch-type">Canlı</span>
<span class="ch-time">20:00</span>
<div class="ch-desc">
<span class="ch-name">A Spor</span>
<span class="ch-text">Beşiktaş SJ - Zielona Gora (Basketbol)</span>
</div>
</li>
<li class="odd">
<span class="ch-type">Canlı</span>
<span class="ch-time">20:30</span>
<div class="ch-desc">
<span class="ch-name">Eurosport 2</span>
<span class="ch-text">Lokomotiv Kuban - Valencia Basket (Basketbol)</span>
</div>
</li>
<li class="even">
<span class="ch-type">Canlı</span>
<span class="ch-time">21:00</span>
<div class="ch-desc">
<span class="ch-name">TRT Spor</span>
<span class="ch-text">Futbol Keyfi (Futbol)</span>
</div>
</li>
<li class="odd">
<span class="ch-type">Canlı</span>
<span class="ch-time">21:00</span>
<div class="ch-desc">
<span class="ch-name">Tivibu Spor</span>
<span class="ch-text">Ters Köşe (Futbol)</span>
</div>
</li>
<li class="even">
<span class="ch-type">Canlı</span>
<span class="ch-time">22:00</span>
<div class="ch-desc">
<span class="ch-name">TRT Spor</span>
<span class="ch-text">Devler Sahnesi (Futbol)</span>
</div>
</li>
<li class="odd">
<span class="ch-type">Canlı</span>
<span class="ch-time">22:00</span>
<div class="ch-desc">
<span class="ch-name">Smartspor 2</span>
<span class="ch-text">Aris - Banvit (Basketbol)</span>
</div>
</li>
<li class="even">
<span class="ch-type">Canlı</span>
<span class="ch-time">22:15</span>
<div class="ch-desc">
<span class="ch-name">Eurosport 2</span>
<span class="ch-text">Bilbao Basket - Khimki Moskova (Basketbol)</span>
</div>
</li>
<li class="odd">
<span class="ch-type">Canlı</span>
<span class="ch-time">23:00</span>
<div class="ch-desc">
<span class="ch-name">NTV Spor</span>
<span class="ch-text">Spor Gecesi (Futbol)</span>
</div>
</li>
<li class="even">
<span class="ch-type">Canlı</span>
<span class="ch-time">23:30</span>
<div class="ch-desc">
<span class="ch-name">TRT Spor</span>
<span class="ch-text">Spor Gecesi (Futbol)</span>
</div>
</li>
<li class="odd">
<span class="ch-type">Canlı</span>
<span class="ch-time">03:00</span>
<div class="ch-desc">
<span class="ch-name">NBA TV</span>
<span class="ch-text">Washington Wizards - Boston Celtics (Basketbol)</span>
</div>
</li></ul>
"""#
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