Einführung in reguläre Ausdrücke in Swift
\n\nRegulä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.
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\nGrundlagen der Arbeit mit NSRegularExpression
\n\nDie Klasse NSRegularExpression ist der primäre Weg, um mit regulären Ausdrücken in Swift zu arbeiten. Betrachten wir die grundlegenden Operationen.
Erstellen eines regulären Ausdrucks
\n\nimport 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\nBeachten Sie den doppelten Backslash \\\\ – in Swift-Strings muss der Backslash escaped werden.
Suchen der ersten Übereinstimmung
\n\nlet 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\nSuchen aller Übereinstimmungen
\n\nlet 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\nVerwendung von Erfassungsgruppen
\n\nErfassungsgruppen ermöglichen das Extrahieren von Teilen einer Übereinstimmung. In Swift werden Gruppen mit runden Klammern () gekennzeichnet.
Datenextraktion mit Gruppen
\n\nlet 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\nBenannte Gruppen (Arbeit mit Range)
\n\nAb Swift 5.7 kann eine bequemere Syntax mit Range verwendet werden:
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\nTextersetzung mit regulären Ausdrücken
\n\nEine der nützlichsten Funktionen ist das Ersetzen von Textteilen nach einem Muster.
\n\nEinfache Ersetzung
\n\nlet 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