Expressions régulières en Kotlin avec exemples : en pratique

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

Expressions régulières en Kotlin avec exemples : en pratique

\n\n

Les expressions régulières (regex) sont un outil puissant pour travailler avec les chaînes de caractères. En Kotlin, elles sont implémentées sur la base des classes Java Pattern et Matcher, mais le langage y ajoute ses propres extensions pratiques et du sucre syntaxique. Dans cet article, nous allons voir comment utiliser les expressions régulières en Kotlin sur des exemples concrets : de la simple recherche au remplacement et à la division de chaînes.

\n\n

Bases de la syntaxe : création et compilation

\n\n

En Kotlin, une expression régulière peut être créée de deux manières : via la classe Regex ou à l'aide d'une chaîne avec un motif. La première méthode est préférable car elle offre plus de méthodes.

\n\n
// Méthode 1 : via la classe Regex\nval regex = Regex("\\\\d+") // un ou plusieurs chiffres\n\n// Méthode 2 : via une chaîne (déconseillé pour les expressions complexes)\nval pattern = "\\\\d+".toRegex()
\n\n

Notez la double barre oblique d'échappement : \\\\d — c'est l'échappement pour Java/Kotlin afin d'obtenir le caractère \\d dans la chaîne. Pour simplifier, Kotlin prend en charge les chaînes brutes (triples guillemets """), où l'échappement n'est pas nécessaire :

\n\n
val regex = Regex("""\\d+""") // chaîne brute — les barres obliques inverses n'ont pas besoin d'être doublées
\n\n

On peut également ajouter des drapeaux, par exemple RegexOption.IGNORE_CASE :

\n\n
val regex = Regex("kotlin", RegexOption.IGNORE_CASE)
\n\n

Recherche et vérification de correspondances

\n\n

Les opérations les plus courantes sont de vérifier si une chaîne contient une sous-chaîne correspondant au motif, et de trouver toutes les correspondances.

\n\n

Vérification de présence d'une correspondance : containsMatchIn

\n\n
val text = "Mon numéro : 123-45-678"\nval digitRegex = Regex("""\\d+""")\n\nif (digitRegex.containsMatchIn(text)) {\n    println("Le texte contient des chiffres !")\n}
\n\n

Recherche de la première correspondance : find

\n\n
val result = digitRegex.find(text)\nprintln(result?.value) // Affiche : 123
\n\n

Recherche de toutes les correspondances : findAll

\n\n
val allMatches = digitRegex.findAll(text)\nallMatches.forEach { match ->\n    println("Trouvé : ${match.value}") // 123, 45, 678\n}
\n\n

La méthode findAll retourne une séquence d'objets MatchResult. Chaque objet contient non seulement la correspondance elle-même (.value), mais aussi sa position dans la chaîne (.range).

\n\n

Travail avec les groupes de capture

\n\n

Les groupes de capture sont des parties du motif placées entre parenthèses. Ils permettent d'extraire des fragments de données spécifiques. Par exemple, décomposons un email en nom d'utilisateur et domaine :

\n\n
val email = "user@example.com"\nval emailRegex = Regex("""(.+)@(.+)""")\nval matchResult = emailRegex.find(email)\n\nif (matchResult != null) {\n    val (username, domain) = matchResult.destructured\n    println("Nom d'utilisateur : $username") // user\n    println("Domaine : $domain")             // example.com\n}
\n\n

La construction destructured permet de décomposer facilement les groupes en variables. S'il y a plus de groupes, on peut accéder par index :

\n\n
val fullMatch = matchResult.value      // user@example.com\nval group1 = matchResult.groupValues[1] // user\nval group2 = matchResult.groupValues[2] // example.com
\n\n

Groupes nommés (Kotlin 1.7+)

\n\n

À partir de Kotlin 1.7, il est possible d'utiliser des groupes nommés :

\n\n
val namedRegex = Regex("""(?<name>\\w+)@(?<domain>\\w+\\.\\w+)""")\nval match = namedRegex.find("contact@kotlin.org")\nif (match != null) {\n    println(match.groups["name"]?.value)   // contact\n    println(match.groups["domain"]?.value) // kotlin.org\n}
\n\n

Remplacement de texte avec replace

\n\n

La méthode replace permet de remplacer toutes les correspondances par une nouvelle chaîne. Dans le motif de remplacement, on peut faire référence aux groupes de capture avec

Blogs

Book Recommendations