Expressions régulières en Rust : guide complet pour débutants

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 Rust

\n\n

Les expressions régulières (regex) sont un outil puissant pour rechercher, extraire et remplacer du texte selon un motif donné. En Rust, le crate regex est utilisé pour travailler avec les expressions régulières – l'une des bibliothèques les plus populaires et performantes de l'écosystème. Dans cet article, nous aborderons les bases de l'utilisation des regex en Rust, de l'installation aux exemples pratiques.

\n\n

Pourquoi apprendre les expressions régulières en Rust ? Le langage offre un traitement du texte sûr et rapide, et le crate regex garantit l'absence de fuites mémoire et une vitesse d'exécution élevée. Cela fait de Rust un excellent choix pour l'analyse de logs, la validation de formulaires, le traitement de fichiers de configuration et d'autres tâches.

\n\n

Installation et importation du crate regex

\n\n

Pour commencer, ajoutez la dépendance regex dans votre fichier Cargo.toml :

\n\n
[dependencies]\nregex = "1.10"
\n\n

Ensuite, importez le module dans votre code :

\n\n
use regex::Regex;
\n\n

La structure principale avec laquelle vous travaillerez est Regex. Vous pouvez créer une instance à l'aide de la méthode Regex::new(), qui retourne un Result, car le motif peut être invalide.

\n\n
fn main() {\n    let re = Regex::new(r"^\\d{3}-\\d{2}-\\d{4}$").unwrap();\n    println!("Regex créé : {}", re.as_str());\n}
\n\n

Remarque : le motif est écrit en chaînes brutes (r"...") pour éviter l'échappement des barres obliques inverses.

\n\n

Opérations de base avec les expressions régulières

\n\n

1. Vérification de correspondance : is_match

\n\n

La méthode is_match retourne true si le motif est trouvé dans la chaîne :

\n\n
use regex::Regex;\n\nfn main() {\n    let re = Regex::new(r"hello").unwrap();\n    let text = "hello world";\n    \n    if re.is_match(text) {\n        println!("Correspondance trouvée !");\n    } else {\n        println!("Aucune correspondance");\n    }\n}
\n\n

Sortie : Correspondance trouvée !

\n\n

2. Recherche de la première correspondance : find

\n\n

La méthode find retourne Option<Match> – la première correspondance avec des informations sur la position :

\n\n
use regex::Regex;\n\nfn main() {\n    let re = Regex::new(r"\\d+").unwrap();\n    let text = "Code : 12345, prix : 678";\n    \n    if let Some(m) = re.find(text) {\n        println!("Trouvé : '{}' (position {}..{})", m.as_str(), m.start(), m.end());\n    }\n}
\n\n

Sortie : Trouvé : '12345' (position 6..11)

\n\n

3. Recherche de toutes les correspondances : find_iter

\n\n

Pour obtenir toutes les correspondances, utilisez l'itérateur find_iter :

\n\n
use regex::Regex;\n\nfn main() {\n    let re = Regex::new(r"\\d+").unwrap();\n    let text = "Nombres : 42, 100, 7";\n    \n    for m in re.find_iter(text) {\n        println!("Nombre : {}", m.as_str());\n    }\n}
\n\n

Sortie :

\n
Nombre : 42\nNombre : 100\nNombre : 7
\n\n

4. Extraction de groupes : captures

\n\n

Les groupes dans le motif (indiqués par des parenthèses) permettent d'extraire des parties de la correspondance :

\n\n
use regex::Regex;\n\nfn main() {\n    let re = Regex::new(r"(\\w+)@(\\w+)\\.(\\w+)").unwrap();\n    let email = "user@example.com";\n    \n    if let Some(caps) = re.captures(email) {\n        println!("Email complet : {}", &caps[0]);\n        println!("Nom : {}", &caps[1]);\n        println!("Domaine : {}", &caps[2]);\n        println!("Zone : {}", &caps[3]);\n    }\n}
\n\n

Sortie :

\n
Email complet : user@example.com\nNom : user\nDomaine : example\nZone : com
\n\n

Exemples pratiques d'utilisation

\n\n

Exemple 1 : Validation d'un numéro de téléphone

\n\n

Vérifions si une chaîne correspond au format d'un numéro russe (par exemple, +7-XXX-XXX-XX-XX) :

\n\n
use regex::Regex;\n\nfn v                

Blogs

Book Recommendations