import Foundation
let pattern = #"<a class="list-group-item list-group-item-action " href="https:\/\/moodle-hs-ulm\.de\/course\/view\.php\?id=([0-9]*)"(?:.*\s){7}<span class="media-body ">([^<]*)<\/span>"#
let regex = try! NSRegularExpression(pattern: pattern, options: .anchorsMatchLines)
let testString = #"""
<nav class="list-group">
<a class="list-group-item list-group-item-action active" href="https://moodle-hs-ulm.de/" data-key="home" data-isexpandable="0" data-indent="0" data-showdivider="0" data-type="1" data-nodetype="1" data-collapse="0" data-forceopen="1" data-isactive="1" data-hidden="0" data-preceedwithhr="0">
<div class="m-l-0">
<div class="media">
<span class="media-left">
<i class="icon fa fa-home fa-fw " aria-hidden="true" aria-label=""></i>
</span>
<span class="media-body font-weight-bold">Startseite</span>
</div>
</div>
</a>
<a class="list-group-item list-group-item-action " href="https://moodle-hs-ulm.de/my/" data-key="home" data-isexpandable="0" data-indent="0" data-showdivider="0" data-type="70" data-nodetype="0" data-collapse="0" data-forceopen="0" data-isactive="0" data-hidden="0" data-preceedwithhr="0" data-parent-key="home">
<div class="m-l-0">
<div class="media">
<span class="media-left">
<i class="icon fa fa-tachometer fa-fw " aria-hidden="true" aria-label=""></i>
</span>
<span class="media-body ">Dashboard</span>
</div>
</div>
</a>
<a class="list-group-item list-group-item-action " href="https://moodle-hs-ulm.de/calendar/view.php?view=month" data-key="calendar" data-isexpandable="0" data-indent="0" data-showdivider="0" data-type="60" data-nodetype="0" data-collapse="0" data-forceopen="0" data-isactive="0" data-hidden="0" data-preceedwithhr="0" data-parent-key="1">
<div class="m-l-0">
<div class="media">
<span class="media-left">
<i class="icon fa fa-calendar fa-fw " aria-hidden="true" aria-label=""></i>
</span>
<span class="media-body ">Kalender</span>
</div>
</div>
</a>
<div class="list-group-item" data-key="mycourses" data-isexpandable="1" data-indent="0" data-showdivider="0" data-type="0" data-nodetype="1" data-collapse="0" data-forceopen="1" data-isactive="0" data-hidden="0" data-preceedwithhr="0" data-parent-key="home">
<div class="m-l-0">
<div class="media">
<span class="media-left">
<i class="icon fa fa-graduation-cap fa-fw " aria-hidden="true" aria-label=""></i>
</span>
<span class="media-body">Meine Kurse</span>
</div>
</div>
</div>
<a class="list-group-item list-group-item-action " href="https://moodle-hs-ulm.de/course/view.php?id=88" data-key="88" data-isexpandable="0" data-indent="1" data-showdivider="0" data-type="20" data-nodetype="1" data-collapse="0" data-forceopen="0" data-isactive="0" data-hidden="0" data-preceedwithhr="0" data-parent-key="mycourses">
<div class="m-l-1">
<div class="media">
<span class="media-left">
<i class="icon fa fa-graduation-cap fa-fw " aria-hidden="true" aria-label=""></i>
</span>
<span class="media-body ">Algorithmen und Datenstrukturen INF3 (WS18/19)</span>
</div>
</div>
</a>
<a class="list-group-item list-group-item-action " href="https://moodle-hs-ulm.de/course/view.php?id=397" data-key="397" data-isexpandable="0" data-indent="1" data-showdivider="0" data-type="20" data-nodetype="1" data-collapse="0" data-forceopen="0" data-isactive="0" data-hidden="0" data-preceedwithhr="0" data-parent-key="mycourses">
<div class="m-l-1">
<div class="media">
<span class="media-left">
<i class="icon fa fa-graduation-cap fa-fw " aria-hidden="true" aria-label=""></i>
</span>
<span class="media-body ">Analysis 2 für Informatiker</span>
</div>
</div>
</a>
<a class="list-group-item list-group-item-action " href="https://moodle-hs-ulm.de/course/view.php?id=646" data-key="646" data-isexpandable="0" data-indent="1" data-showdivider="0" data-type="20" data-nodetype="1" data-collapse="0" data-forceopen="0" data-isactive="0" data-hidden="0" data-preceedwithhr="0" data-parent-key="mycourses">
<div class="m-l-1">
<div class="media">
<span class="media-left">
<i class="icon fa fa-graduation-cap fa-fw " aria-hidden="true" aria-label=""></i>
</span>
<span class="media-body ">Daba</span>
</div>
</div>
</a>
<a class="list-group-item list-group-item-action " href="https://moodle-hs-ulm.de/course/view.php?id=67" data-key="67" data-isexpandable="0" data-indent="1" data-showdivider="0" data-type="20" data-nodetype="1" data-collapse="0" data-forceopen="0" data-isactive="0" data-hidden="0" data-preceedwithhr="0" data-parent-key="mycourses">
<div class="m-l-1">
<div class="media">
<span class="media-left">
<i class="icon fa fa-graduation-cap fa-fw " aria-hidden="true" aria-label=""></i>
</span>
<span class="media-body ">Einführung in MATLAB</span>
</div>
</div>
</a>
<a class="list-group-item list-group-item-action " href="https://moodle-hs-ulm.de/course/view.php?id=551" data-key="551" data-isexpandable="0" data-indent="1" data-showdivider="0" data-type="20" data-nodetype="1" data-collapse="0" data-forceopen="0" data-isactive="0" data-hidden="0" data-preceedwithhr="0" data-parent-key="mycourses">
<div class="m-l-1">
<div class="media">
<span class="media-left">
<i class="icon fa fa-graduation-cap fa-fw " aria-hidden="true" aria-label=""></i>
</span>
<span class="media-body ">i²</span>
</div>
</div>
</a>
<a class="list-group-item list-group-item-action " href="https://moodle-hs-ulm.de/course/view.php?id=277" data-key="277" data-isexpandable="0" data-indent="1" data-showdivider="0" data-type="20" data-nodetype="1" data-collapse="0" data-forceopen="0" data-isactive="0" data-hidden="0" data-preceedwithhr="0" data-parent-key="mycourses">
<div class="m-l-1">
<div class="media">
<span class="media-left">
<i class="icon fa fa-graduation-cap fa-fw " aria-hidden="true" aria-label=""></i>
</span>
<span class="media-body ">Mobile App Dev</span>
</div>
</div>
</a>
<a class="list-group-item list-group-item-action " href="https://moodle-hs-ulm.de/course/view.php?id=631" data-key="631" data-isexpandable="0" data-indent="1" data-showdivider="0" data-type="20" data-nodetype="1" data-collapse="0" data-forceopen="0" data-isactive="0" data-hidden="0" data-preceedwithhr="0" data-parent-key="mycourses">
<div class="m-l-1">
<div class="media">
<span class="media-left">
<i class="icon fa fa-graduation-cap fa-fw " aria-hidden="true" aria-label=""></i>
</span>
<span class="media-body ">Programmieren III / INF3A</span>
</div>
</div>
</a>
</nav>
"""#
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