Expressions régulières en Java 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 Java : de la théorie à la pratique

\n

Les expressions régulières (regex) sont un outil puissant pour rechercher, remplacer et valider du texte. En Java, leur manipulation est implémentée via le package java.util.regex, qui comprend deux classes principales : Pattern (modèle) et Matcher (comparateur). Dans cet article, nous analyserons la syntaxe, les méthodes clés et consoliderons les connaissances avec des exemples de code concrets.

\n

Ce matériel sera utile aussi bien aux débutants découvrant Java qu'aux développeurs expérimentés souhaitant rafraîchir leurs connaissances. Tous les exemples peuvent être exécutés directement dans votre IDE.

\n\n

1. Bases du travail avec Pattern et Matcher

\n

Tout travail avec regex en Java commence par la compilation du modèle via Pattern.compile(). Ensuite, un objet Matcher est créé, qui applique le modèle à la chaîne.

\n

Considérons un exemple simple : recherche de tous les chiffres dans un texte.

\n
import java.util.regex.Matcher;\nimport java.util.regex.Pattern;\n\npublic class RegexDemo {\n    public static void main(String[] args) {\n        String text = "Java version 21 est sortie en 2023";\n        String regex = "\\\\d+"; // un ou plusieurs chiffres\n\n        Pattern pattern = Pattern.compile(regex);\n        Matcher matcher = pattern.matcher(text);\n\n        while (matcher.find()) {\n            System.out.println("Trouvé : " + matcher.group());\n        }\n    }\n}
\n

Sortie du programme :

\n
Trouvé : 21\nTrouvé : 2023
\n

Notez la double barre oblique \\\\d — en Java, le littéral de chaîne nécessite l'échappement de la barre oblique inverse. Si dans regex vous devez spécifier \\d, dans le code nous écrivons \\\\d.

\n\n

2. Syntaxe des expressions régulières : métacaractères et quantificateurs

\n

Pour utiliser efficacement les regex, il est important de mémoriser les principaux métacaractères :

\n
    \n
  • . — n'importe quel caractère (sauf le saut de ligne) ;
  • \n
  • \\\\d — un chiffre (équivalent à [0-9]) ;
  • \n
  • \\\\w — lettre, chiffre ou tiret bas ([a-zA-Z0-9_]) ;
  • \n
  • \\\\s — un caractère d'espacement ;
  • \n
  • ^ — début de la chaîne ;
  • \n
  • $ — fin de la chaîne.
  • \n
\n

Les quantificateurs contrôlent le nombre de répétitions :

\n
    \n
  • + — une ou plusieurs fois ;
  • \n
  • * — zéro ou plusieurs fois ;
  • \n
  • ? — zéro ou une fois ;
  • \n
  • {n} — exactement n fois ;
  • \n
  • {n,m} — de n à m fois.
  • \n
\n

Exemple : trouvons tous les mots composés uniquement de lettres latines, d'une longueur de 3 à 5 caractères.

\n
String text = "Java regex exemple pour débutants";\nString regex = "\\\\b[a-zA-Z]{3,5}\\\\b";\n\nPattern pattern = Pattern.compile(regex);\nMatcher matcher = pattern.matcher(text);\n\nwhile (matcher.find()) {\n    System.out.println(matcher.group());\n}\n// Sortie : Java, regex, pour
\n

La limite de mot \\\\b empêche les correspondances partielles (par exemple, "Java" ne fera pas partie de "JavaScript").

\n\n

3. Exemples pratiques : validation et extraction de données

\n

Passons aux tâches fréquemment rencontrées dans le développement réel.

\n\n

3.1. Validation d'une adresse email

\n

Vérification simple : présence du symbole "@" et du domaine.

\n
public static boolean isValidEmail(String email) {\n    String regex = "^[\\\\w.-]+@[\\\\w.-]+\\\\.\\\\w{2,}$";\n    return Pattern.matches(regex, email);\n}\n\npublic static void main(String[] args) {\n    System.out.println(isValidEmail("user@example.com")); // true\n    System.out.println(isValidEmail("email-invalide"));    // false\n}
\n

La méthode Pattern.matches() vérifie automatiquement la chaîne entière (équivalent à matcher.matches()).

\n\n

3.2. Extraction de numéros de téléphone

\n

Supposons que le texte contienne des numéros au format "+7 (999) 123-45-67".

\n
String text = "Contact : +                

Blogs

Book Recommendations