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: Von den Grundlagen bis zu fortgeschrittenen Beispielen



Reguläre Ausdrücke (regex) sind ein leistungsstarkes Werkzeug für die Textverarbeitung, mit dem Sie Zeichenfolgen nach komplexen Mustern suchen, ersetzen und überprüfen können. In Swift für iOS und macOS wird die Arbeit mit regulären Ausdrücken über die Klasse NSRegularExpression aus dem Foundation-Framework implementiert. In diesem Artikel werden wir alle wichtigen Aspekte behandeln: von der Erstellung einfachster Muster bis zur Ergebnisverarbeitung und Leistungsoptimierung.



Der Artikel wird sowohl für Anfänger, die gerade Swift kennenlernen, als auch für erfahrene Entwickler nützlich sein, die ihre Kenntnisse in der Textverarbeitung in iOS/macOS-Anwendungen vertiefen möchten.



1. Grundlagen der Arbeit mit NSRegularExpression



Die Klasse NSRegularExpression ist das wichtigste Werkzeug für die Arbeit mit regulären Ausdrücken in Swift. Sie bietet Methoden zum Suchen, Ersetzen und Extrahieren von Daten aus Zeichenfolgen.



1.1. Erstellen eines regulären Ausdrucks



Um ein NSRegularExpression-Objekt zu erstellen, wird ein Initialisierer verwendet, der eine Zeichenfolge mit dem Muster und optionale Flags (NSRegularExpression.Options) akzeptiert. Die Konstruktion ist in try eingeschlossen, da sie bei ungültiger Mustersyntax einen Fehler auslösen kann.



import Foundation

let pattern = "\\\\d{3}-\\\\d{2}-\\\\d{4}" // Beispiel: 123-45-6789do { let regex = try NSRegularExpression(pattern: pattern, options: []) print("Regulärer Ausdruck erfolgreich erstellt")} catch { print("Fehler in der Syntax des regulären Ausdrucks: \\(error.localizedDescription)")}


1.2. Wichtige Optionen (NSRegularExpression.Options)



Optionen ermöglichen es, das Verhalten des regulären Ausdrucks zu ändern. Hier sind die am häufigsten verwendeten:



  • .caseInsensitive — Groß-/Kleinschreibung ignorieren (A = a).
  • .allowCommentsAndWhitespace — Leerzeichen und Kommentare im Muster ignorieren.
  • .dotMatchesLineSeparators — Der Punkt (.) entspricht auch Zeilenumbruchzeichen.
  • .anchorsMatchLines — Die Zeichen ^ und $ entsprechen dem Anfang und Ende jeder Zeile, nicht der gesamten Zeichenfolge.


Beispiel mit der Option .caseInsensitive:



let pattern = "hello"let regex = try NSRegularExpression(pattern: pattern, options: .caseInsensitive)let testString = "Hello, World!"let range = NSRange(location: 0, length: testString.utf16.count)if regex.firstMatch(in: testString, options: [], range: range) != nil {    print("Übereinstimmung gefunden") // Gibt aus: Übereinstimmung gefunden}


2. Suche nach Übereinstimmungen und Arbeit mit Ergebnissen



Nach der Erstellung eines regulären Ausdrucks kann die Suche nach Übereinstimmungen in einer Zeichenfolge durchgeführt werden. Dazu werden die Methoden firstMatch und matches verwendet.



2.1. Suche nach der ersten Übereinstimmung



Die Methode firstMatch(in:options:range:) gibt die erste gefundene Übereinstimmung als NSTextCheckingResult-Objekt zurück (oder nil, wenn nichts gefunden wurde).



let text = "Meine Nummer: 123-45-6789, sowie 987-65-4321"let pattern = "\\\\d{3}-\\\\d{2}-\\\\d{4}"let regex = try NSRegularExpression(pattern: pattern, options: [])let range = NSRange(location: 0, length: text.utf16.count)

if let match = regex.firstMatch(in: text, options: [], range: range) { let matchedString = (text as NSString).substring(with: match.range) print("Erste Übereinstimmung: \\(matchedString)") // 123-45-6789}


2.2. Suche nach allen Übereinstimmungen



Die Methode matches(in:options:range:) gibt ein Array aller Übereinstimmungen zurück. Dies ist nützlich, wenn jedes Vorkommen des Musters verarbeitet werden muss.



let text = "Codes: ABC-123, DEF-456, GHI-789"let pattern = "[A-Z]{3}-\\\\d{3}"let regex = try NSRegularExpression(pattern: pattern, options: [])let range = NSRange(location: 0, length: text.utf16.count)let matches = regex.matches(in: text                

Blogs

Buchempfehlungen