Expressions régulières en Swift : guide complet avec exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction aux expressions régulières en Swift

\n\n

Les expressions régulières (regex) sont un outil puissant pour rechercher, extraire et remplacer du texte selon un motif. En Swift, le travail avec les expressions régulières est implémenté via la classe NSRegularExpression du framework Foundation, ainsi que via les méthodes intégrées des chaînes. C'est un outil indispensable lors du développement d'applications iOS et macOS pour la validation de formulaires, l'analyse de données, le filtrage de texte et de nombreuses autres tâches.

\n\n

Dans cet article, nous allons explorer les principales possibilités de travail avec les expressions régulières en Swift à travers des exemples pratiques. Vous apprendrez à créer des motifs, effectuer des recherches, des remplacements et des extractions de données.

\n\n

Fondamentaux de NSRegularExpression

\n\n

La classe NSRegularExpression est la méthode principale pour travailler avec les expressions régulières en Swift. Examinons les opérations de base.

\n\n

Création d'une expression régulière

\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("Motif invalide")\n}
\n\n

Notez la double barre oblique \\\\ — en Swift, les chaînes nécessitent l'échappement de la barre oblique inverse.

\n\n

Recherche de la première correspondance

\n\n
let text = "Contactez-nous par email : 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("Email trouvé : \\(email)") // support@example.com\n}
\n\n

Recherche de toutes les correspondances

\n\n
let text = "Contacts : 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// Sortie :\n// info@site.com\n// admin@site.com\n// support@site.com
\n\n

Utilisation des groupes de capture

\n\n

Les groupes de capture permettent d'extraire des parties de la correspondance. En Swift, les groupes sont indiqués par des parenthèses ().

\n\n

Extraction de données avec des groupes

\n\n
let pattern = "(\\\\d{4})-(\\\\d{2})-(\\\\d{2})"\nlet dateString = "Aujourd'hui : 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("Année : \\(year), Mois : \\(month), Jour : \\(day)")\n}
\n\n

Groupes nommés (travail avec Range)

\n\n

Depuis Swift 5.7, vous pouvez utiliser une syntaxe plus pratique avec Range :

\n\n
let text = "Prix : 1500 roubles"\nlet pattern = #"(\\d+)\\sroubles"#\n\nif let range = text.range(of: pattern, options: .regularExpression) {\n    let match = text[range]\n    print("Trouvé : \\(match)") // 1500 roubles\n}
\n\n

Remplacement de texte avec des expressions régulières

\n\n

L'une des fonctionnalités les plus utiles est le remplacement de parties de texte selon un motif.

\n\n

Remplacement simple

\n\n
let text = "Appelez au numéro +7 (123) 456-78-90"\nlet pattern = "\\\\+7\\\\s\\\\(\\\\d{3}\\\\)\\\\s\\\\d{3}-\\\\d{2}-\\\\d{2}"\nlet replacement = "[numéro masqué]"\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) // Appelez au numéro [numéro masqué]
\n\n

Remplacement

Blogs

Book Recommendations