import Foundation
let pattern = #"\);">(.+?)</a>.+?(\d{1,2}:\d{2})"#
let regex = try! NSRegularExpression(pattern: pattern)
let testString = #"<tbody><tr class=" tr_aktywny pogrubienie kolor0"> <td class="strzalka"><img src="../img/darr.gif"></td><td><a name="przystanek" href="../index.php?co=linie_przystanku&id_przystanku=537" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=537');">Chorzów Batory Pętla</a></td><td>b.d.</td> <td><a href="../index.php?co=linie_przystanku&id_przystanku=537" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=537');">5:35</a></td> </tr><tr class=" tr_aktywny kolor1"> <td class="strzalka"><img src="../img/darr.gif"></td><td><a href="../index.php?co=linie_przystanku&id_przystanku=538" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=538');">Chorzów Batory Osiedle</a></td><td>0.60 km</td> <td><a href="../index.php?co=linie_przystanku&id_przystanku=538" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=538');">5:37</a></td> </tr><tr class=" tr_aktywny kolor0"> <td class="strzalka"><img src="../img/darr.gif"></td><td><a href="../index.php?co=linie_przystanku&id_przystanku=539" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=539');">Chorzów Batory Kościół</a></td><td>0.50 km</td> <td><a href="../index.php?co=linie_przystanku&id_przystanku=539" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=539');">5:39</a></td> </tr><tr class=" tr_aktywny kolor1"> <td class="strzalka"><img src="../img/darr.gif"></td><td><a href="../index.php?co=linie_przystanku&id_przystanku=540" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=540');">Chorzów Batory 16 Lipca</a></td><td>0.50 km</td> <td><a href="../index.php?co=linie_przystanku&id_przystanku=540" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=540');">5:40</a></td> </tr><tr class=" tr_aktywny kolor0"> <td class="strzalka"><img src="../img/darr.gif"></td><td><a href="../index.php?co=linie_przystanku&id_przystanku=211" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=211');">Chorzów Batory Dworzec PKP</a></td><td>0.60 km</td> <td><a href="../index.php?co=linie_przystanku&id_przystanku=211" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=211');">5:42</a></td> </tr><tr class=" tr_aktywny kolor1"> <td class="strzalka"><img src="../img/darr.gif"></td><td><a href="../index.php?co=linie_przystanku&id_przystanku=138" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=138');">Chorzów Dąbrowskiego</a></td><td>0.60 km</td> <td><a href="../index.php?co=linie_przystanku&id_przystanku=138" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=138');">5:44</a></td> </tr><tr class=" tr_aktywny kolor0"> <td class="strzalka"><img src="../img/darr.gif"></td><td><a href="../index.php?co=linie_przystanku&id_przystanku=184" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=184');">Chorzów Cmentarz</a></td><td>0.30 km</td> <td><a href="../index.php?co=linie_przystanku&id_przystanku=184" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=184');">5:45</a></td> </tr><tr class=" tr_aktywny kolor1"> <td class="strzalka"><img src="../img/darr.gif"></td><td><a href="../index.php?co=linie_przystanku&id_przystanku=185" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=185');">Chorzów ZUS</a></td><td>0.80 km</td> <td><a href="../index.php?co=linie_przystanku&id_przystanku=185" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=185');">5:48</a></td> </tr><tr class=" tr_aktywny kolor0"> <td class="strzalka"><img src="../img/darr.gif"></td><td><a href="../index.php?co=linie_przystanku&id_przystanku=931" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=931');">Chorzów Plac Hutników</a></td><td>0.90 km</td> <td><a href="../index.php?co=linie_przystanku&id_przystanku=931" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=931');">5:51</a></td> </tr><tr class=" tr_aktywny kolor1"> <td class="strzalka"><img src="../img/darr.gif"></td><td><a href="../index.php?co=linie_przystanku&id_przystanku=542" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=542');">Chorzów Metalowców</a></td><td>0.90 km</td> <td><a href="../index.php?co=linie_przystanku&id_przystanku=542" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=542');">5:53</a></td> </tr><tr class=" tr_aktywny kolor0"> <td class="strzalka"><img src="../img/darr.gif"></td><td><a href="../index.php?co=linie_przystanku&id_przystanku=543" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=543');">Chorzów Stabika</a></td><td>0.90 km</td> <td><a href="../index.php?co=linie_przystanku&id_przystanku=543" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=543');">5:56</a></td> </tr><tr class=" tr_aktywny kolor1"> <td class="strzalka"><img src="../img/darr.gif"></td><td><a href="../index.php?co=linie_przystanku&id_przystanku=544" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=544');">Chorzów Stary Dworzec PKP</a></td><td>0.80 km</td> <td><a href="../index.php?co=linie_przystanku&id_przystanku=544" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=544');">5:58</a></td> </tr><tr class=" tr_aktywny kolor0"> <td class="strzalka"><img src="../img/darr.gif"></td><td><a href="../index.php?co=linie_przystanku&id_przystanku=545" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=545');">Chorzów Stary Wiejska</a></td><td>0.50 km</td> <td><a href="../index.php?co=linie_przystanku&id_przystanku=545" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=545');">6:00</a></td> </tr><tr class=" tr_aktywny kolor1"> <td class="strzalka"><img src="../img/darr.gif"></td><td><a href="../index.php?co=linie_przystanku&id_przystanku=546" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=546');">Maciejkowice Szyb Zygmunt</a></td><td>1.10 km</td> <td><a href="../index.php?co=linie_przystanku&id_przystanku=546" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=546');">6:02</a></td> </tr><tr class=" tr_aktywny kolor0"> <td class="strzalka"><img src="../img/darr.gif"></td><td><a href="../index.php?co=linie_przystanku&id_przystanku=547" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=547');">Maciejkowice Spółdzielnia</a></td><td>0.40 km</td> <td><a href="../index.php?co=linie_przystanku&id_przystanku=547" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=547');">6:03</a></td> </tr><tr class=" tr_aktywny kolor1"> <td class="strzalka"><img src="../img/darr.gif"></td><td><a href="../index.php?co=linie_przystanku&id_przystanku=548" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=548');">Maciejkowice Dwór</a></td><td>0.30 km</td> <td><a href="../index.php?co=linie_przystanku&id_przystanku=548" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=548');">6:04</a></td> </tr><tr class=" tr_aktywny kolor0"> <td class="strzalka"><img src="../img/darr.gif"></td><td><a href="../index.php?co=linie_przystanku&id_przystanku=549" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=549');">Maciejkowice Michałkowicka</a></td><td>0.40 km</td> <td><a href="../index.php?co=linie_przystanku&id_przystanku=549" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=549');">6:05</a></td> </tr><tr class=" tr_aktywny kolor1"> <td class="strzalka"><img src="../img/darr.gif"></td><td><a href="../index.php?co=linie_przystanku&id_przystanku=550" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=550');">Michałkowice Plac Sportowy</a></td><td>1.00 km</td> <td><a href="../index.php?co=linie_przystanku&id_przystanku=550" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=550');">6:07</a></td> </tr><tr class=" tr_aktywny kolor0"> <td class="strzalka"><img src="../img/darr.gif"></td><td><a href="../index.php?co=linie_przystanku&id_przystanku=116" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=116');">Michałkowice Kościół</a></td><td>0.60 km</td> <td><a href="../index.php?co=linie_przystanku&id_przystanku=116" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=116');">6:09</a></td> </tr><tr class=" tr_aktywny kolor1"> <td class="strzalka"><img src="../img/darr.gif"></td><td><a href="../index.php?co=linie_przystanku&id_przystanku=551" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=551');">Michałkowice Park Górnik</a></td><td>0.40 km</td> <td><a href="../index.php?co=linie_przystanku&id_przystanku=551" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=551');">6:10</a></td> </tr><tr class=" tr_aktywny kolor0"> <td class="strzalka"><img src="../img/darr.gif"></td><td><a href="../index.php?co=linie_przystanku&id_przystanku=552" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=552');">Bytków Watoły</a></td><td>0.80 km</td> <td><a href="../index.php?co=linie_przystanku&id_przystanku=552" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=552');">6:12</a></td> </tr><tr class=" tr_aktywny kolor1"> <td class="strzalka"><img src="../img/darr.gif"></td><td><a href="../index.php?co=linie_przystanku&id_przystanku=22" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=22');">Bytków Osiedle Młodych</a></td><td>0.60 km</td> <td><a href="../index.php?co=linie_przystanku&id_przystanku=22" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=22');">6:14</a></td> </tr><tr class=" tr_aktywny kolor0"> <td class="strzalka"><img src="../img/darr.gif"></td><td><a href="../index.php?co=linie_przystanku&id_przystanku=23" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=23');">Bytków Kapicy</a></td><td>0.30 km</td> <td><a href="../index.php?co=linie_przystanku&id_przystanku=23" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=23');">6:15</a></td> </tr><tr class=" tr_aktywny kolor1"> <td class="strzalka"><img src="../img/darr.gif"></td><td><a href="../index.php?co=linie_przystanku&id_przystanku=24" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=24');">Siemianowice Korfantego</a></td><td>0.40 km</td> <td><a href="../index.php?co=linie_przystanku&id_przystanku=24" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=24');">6:17</a></td> </tr><tr class=" tr_aktywny kolor0"> <td class="strzalka"><img src="../img/darr.gif"></td><td><a href="../index.php?co=linie_przystanku&id_przystanku=25" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=25');">Siemianowice Kopalniana</a></td><td>0.40 km</td> <td><a href="../index.php?co=linie_przystanku&id_przystanku=25" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=25');">6:18</a></td> </tr><tr class=" tr_aktywny kolor1"> <td class="strzalka"><img src="../img/darr.gif"></td><td><a href="../index.php?co=linie_przystanku&id_przystanku=26" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=26');">Siemianowice Hutnicza n/ż</a></td><td>0.50 km</td> <td><a href="../index.php?co=linie_przystanku&id_przystanku=26" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=26');">6:19</a></td> </tr><tr class=" tr_aktywny kolor0"> <td class="strzalka"><img src="../img/darr.gif"></td><td><a href="../index.php?co=linie_przystanku&id_przystanku=27" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=27');">Siemianowice Plac Skargi</a></td><td>0.30 km</td> <td><a href="../index.php?co=linie_przystanku&id_przystanku=27" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=27');">6:20</a></td> </tr><tr class=" tr_aktywny kolor1"> <td class="strzalka"><img src="../img/darr.gif"></td><td><a href="../index.php?co=linie_przystanku&id_przystanku=553" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=553');">Siemianowice Głowackiego</a></td><td>0.50 km</td> <td><a href="../index.php?co=linie_przystanku&id_przystanku=553" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=553');">6:21</a></td> </tr><tr class=" tr_aktywny kolor0"> <td class="strzalka"><img src="../img/darr.gif"></td><td><a href="../index.php?co=linie_przystanku&id_przystanku=554" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=554');">Siemianowice Fabryczna</a></td><td>0.70 km</td> <td><a href="../index.php?co=linie_przystanku&id_przystanku=554" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=554');">6:23</a></td> </tr><tr class=" tr_aktywny kolor1"> <td class="strzalka"><img src="../img/darr.gif"></td><td><a href="../index.php?co=linie_przystanku&id_przystanku=555" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=555');">Siemianowice Rurownia</a></td><td>1.20 km</td> <td><a href="../index.php?co=linie_przystanku&id_przystanku=555" onclick="przeladuj_zamknij('../index.php?co=linie_przystanku&id_przystanku=555');">6:26</a></td> </tr></tbody>"#
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