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

Einführung in reguläre Ausdrücke in Swift

\n\n

Reguläre Ausdrücke (Regex) sind ein leistungsstarkes Werkzeug zum Suchen, Extrahieren und Ersetzen von Text nach einem Muster. In Swift wird die Arbeit mit regulären Ausdrücken über die Klasse NSRegularExpression aus dem Foundation-Framework sowie über integrierte String-Methoden realisiert. Sie sind ein unverzichtbares Werkzeug bei der Entwicklung von iOS- und macOS-Anwendungen für Formularvalidierung, Datenparsing, Textfilterung und viele andere Aufgaben.

\n\n

In diesem Artikel werden wir die grundlegenden Möglichkeiten der Arbeit mit regulären Ausdrücken in Swift anhand praktischer Beispiele untersuchen. Sie erfahren, wie Sie Muster erstellen, Suchen, Ersetzen und Datenextraktion durchführen.

\n\n

Grundlagen der Arbeit mit NSRegularExpression

\n\n

Die Klasse NSRegularExpression ist der primäre Weg, um mit regulären Ausdrücken in Swift zu arbeiten. Betrachten wir die grundlegenden Operationen.

\n\n

Erstellen eines regulären Ausdrucks

\n\n
import Foundation\n\nlet pattern = "[A-Za-z]+@[A-Za-z]+\\\\.[A-Za-z]+"\nguard let regex = try? NSRegularExpression(pattern: pattern) else {\n    fatalError("Ungültiges Muster")\n}
\n\n

Beachten Sie den doppelten Backslash \\\\ – in Swift-Strings muss der Backslash escaped werden.

\n\n

Suchen der ersten Übereinstimmung

\n\n
let text = "Kontaktieren Sie uns per E-Mail: support@example.com"\nlet nsString = text as NSString\nlet range = NSRange(location: 0, length: nsString.length)\n\nif let match = regex.firstMatch(in: text, range: range) {\n    let email = nsString.substring(with: match.range)\n    print("E-Mail gefunden: \\(email)") // support@example.com\n}
\n\n

Suchen aller Übereinstimmungen

\n\n
let text = "Kontakte: info@site.com, admin@site.com, support@site.com"\nlet matches = regex.matches(in: text, range: NSRange(location: 0, length: text.count))\n\nfor match in matches {\n    let range = match.range\n    let email = (text as NSString).substring(with: range)\n    print(email)\n}\n// Ausgabe:\n// info@site.com\n// admin@site.com\n// support@site.com
\n\n

Verwendung von Erfassungsgruppen

\n\n

Erfassungsgruppen ermöglichen das Extrahieren von Teilen einer Übereinstimmung. In Swift werden Gruppen mit runden Klammern () gekennzeichnet.

\n\n

Datenextraktion mit Gruppen

\n\n
let pattern = "(\\\\d{4})-(\\\\d{2})-(\\\\d{2})"\nlet dateString = "Heute: 2024-03-15"\n\nguard let regex = try? NSRegularExpression(pattern: pattern) else { return }\nlet nsString = dateString as NSString\n\nif let match = regex.firstMatch(in: dateString, range: NSRange(location: 0, length: nsString.length)) {\n    let fullDate = nsString.substring(with: match.range) // 2024-03-15\n    let year = nsString.substring(with: match.range(at: 1)) // 2024\n    let month = nsString.substring(with: match.range(at: 2)) // 03\n    let day = nsString.substring(with: match.range(at: 3)) // 15\n    \n    print("Jahr: \\(year), Monat: \\(month), Tag: \\(day)")\n}
\n\n

Benannte Gruppen (Arbeit mit Range)

\n\n

Ab Swift 5.7 kann eine bequemere Syntax mit Range verwendet werden:

\n\n
let text = "Preis: 1500 Rubel"\nlet pattern = #"(\\d+)\\sRubel"#\n\nif let range = text.range(of: pattern, options: .regularExpression) {\n    let match = text[range]\n    print("Gefunden: \\(match)") // 1500 Rubel\n}
\n\n

Textersetzung mit regulären Ausdrücken

\n\n

Eine der nützlichsten Funktionen ist das Ersetzen von Textteilen nach einem Muster.

\n\n

Einfache Ersetzung

\n\n
let text = "Rufen Sie an unter +7 (123) 456-78-90"\nlet pattern = "\\\\+7\\\\s\\\\(\\\\d{3}\\\\)\\\\s\\\\d{3}-\\\\d{2}-\\\\d{2}"\nlet replacement = "[Nummer verborgen]"\n\nguard let regex = try? NSRegularExpression(pattern: pattern) else { return }\nlet modifiedText = regex.stringByReplacingMatches(\n    in: text,\n    range: NSRange(location: 0, length: text.count),\n    withTemplate: replacement\n)\n\nprint(modifiedText) // Rufen Sie an unter [Nummer verborgen]
\n\n

Ersetzung

Blogs

Buchempfehlungen