Reguläre Ausdrücke in Swift: Vollständiger Leitfaden mit Beispielen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Reguläre Ausdrücke in Swift: Ein leistungsstarkes Werkzeug für die Textverarbeitung

Reguläre Ausdrücke (regex) sind ein unverzichtbares Werkzeug für iOS- und macOS-Entwickler. Sie ermöglichen komplexe Suche, Ersetzung und Validierung von Textdaten mit kompakten Mustern. In Swift wird die Arbeit mit regulären Ausdrücken über die Klasse NSRegularExpression aus dem Foundation framework implementiert. In diesem Artikel werden wir alle Aspekte der Verwendung von regex in Swift behandeln: von der grundlegenden Syntax bis zu fortgeschrittenen Techniken, mit praktischen Beispielen für iOS- und macOS-Anwendungen.



Grundlagen von NSRegularExpression in Swift

Für die Arbeit mit regulären Ausdrücken in Swift wird die Klasse NSRegularExpression verwendet. Sie bietet leistungsstarke Methoden zum Suchen, Ersetzen und Extrahieren von Daten aus Zeichenketten. Betrachten wir die grundlegende Initialisierungssyntax:



import Foundation

let pattern = "\\\\d{3}-\\\\d{2}-\\\\d{4}" // Muster für SSNlet text = "Meine SSN: 123-45-6789"

do { let regex = try NSRegularExpression(pattern: pattern) let results = regex.matches(in: text, range: NSRange(text.startIndex..., in: text)) for match in results { let range = Range(match.range, in: text)! print("Gefunden: \\(text[range])") }} catch { print("Fehler im regulären Ausdruck: \\(error.localizedDescription)")}


Beachten Sie die Maskierung des Backslashs in Swift-Strings. Für jeden Backslash im Muster müssen zwei gesetzt werden (\\\\d statt \\d).



Erstellung und Konfiguration eines regulären Ausdrucks

Der Konstruktor NSRegularExpression akzeptiert einen optionalen Parameter options, der das Verhalten des regex anpasst:



  • .caseInsensitive — Groß-/Kleinschreibung ignorieren
  • .dotMatchesLineSeparators — Punkt entspricht Zeilenumbruchzeichen
  • .anchorsMatchLines — Anker ^ und $ funktionieren für jede Zeile
  • .useUnixLineSeparators — nur als Zeilentrenner verwenden


let regex = try NSRegularExpression(    pattern: "swift",    options: [.caseInsensitive])// Jetzt findet das Muster "Swift", "SWIFT", "swift" usw.


Suchen und Extrahieren von Daten mit regex

Eine der Hauptaufgaben regulärer Ausdrücke ist die Suche nach Teilzeichenketten, die dem Muster entsprechen. In Swift erfolgt dies über die Methode matches(in:options:range:).



Suche aller Übereinstimmungen

let text = "Kontakte: email@example.com, support@test.org, admin@site.com"let emailPattern = "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\\\.[A-Za-z]{2,}"

let regex = try NSRegularExpression(pattern: emailPattern)let matches = regex.matches(in: text, range: NSRange(text.startIndex..., in: text))

print("Gefundene E-Mails: \\(matches.count)")for match in matches { if let range = Range(match.range, in: text) { print(String(text[range])) }}// Ausgabe:// Gefundene E-Mails: 3// email@example.com// support@test.org// admin@site.com


Suche mit Erfassungsgruppen

Gruppen in runden Klammern ermöglichen das Extrahieren von Teilen der Übereinstimmung. Dies ist besonders nützlich für das Parsen strukturierter Daten:



let logLine = "2024-01-15 14:30:22 [ERROR] Verbindung zum Server fehlgeschlagen"let logPattern = "(\\\\d{4}-\\\\d{2}-\\\\d{2}) (\\\\d{2}:\\\\d{2}:\\\\d{2}) \\\\[(\\\\w+)\\\\] (.+)"

let regex = try NSRegularExpression(pattern: logPattern)if let match = regex.firstMatch(in: logLine, range: NSRange(logLine.startIndex..., in: logLine)) { let dateRange = Range(match.range(at: 1), in: logLine)! let timeRange = Range(match.range(at: 2), in: logLine)! let levelRange = Range(match.range(at: 3), in: logLine)! let messageRange = Range(match.range(at: 4), in: logLine)! print("Datum: \\(logLine[dateRange])") print("Zeit: \\(logL")

Blogs

Buchempfehlungen