L'utilisasion des expressions régulières (Regex) en Java permet de valider des formats de données complexes. Un besoin courant consiste à vérifier qu'une chaîne de caractères ne contient pas certains motifs ou symboles spécifiques. Pour ce faire, l'API java.util.regex propose plusieurs approches, notamment les classes de caractères inversées et les assertions négatives.
- Utilisation des classes de caractères négatives
La méthode la plus simple pour exclure des caractères spécifiques est d'utiliser les crochets avec un accent circonflexe [^...]. Ce symbole placé au début de la classe indique au moteur de recherche de correspondre à tout caractère sauf ceux listés.
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class ValidateurSimple {
public static void main(String[] args) {
// Motif : La chaîne ne doit contenir aucun chiffre
String regleExclusion = "^[^0-9]+$";
String donneeTest = "JavaRegex";
boolean estValide = Pattern.matches(regleExclusion, donneeTest);
System.out.println("Contenu sans chiffres : " + estValide);
}
}
- Mise en œuvre avec Pattern et Matcher
Pour des opérations plus granulaires, il est recommandé de compiler le motif pour optimiser les performances, surtout lors d'itérations multiples.
String saisieUtilisateur = "Utilisateur_2024";
// On définit un motif excluant les caractères spéciaux comme @ ou #
Pattern motifFiltrage = Pattern.compile("^[^@#]+$");
Matcher explorateur = motifFiltrage.matcher(saisieUtilisateur);
if (explorateur.matches()) {
System.out.println("La saisie est conforme : aucun caractère interdit détecté.");
} else {
System.out.println("Erreur : Présence de caractères non autorisés.");
}
- Exclusion de séquences spécifiques (Negative Lookahead)
Si l'objectif est d'exclure un mot enteir ou une séquence de caractères plutôt que des caractères individuels, on utilise l'assertion négative (?!...). Cela permet de s'assurer qu'une chaîne ne contient pas un terme spécifique.
// Vérifie que la chaîne ne contient pas le mot "erreur"
String regexSequence = "^((?!erreur).)*$";
String journal = "Le processus s'est terminé normalement.";
boolean resultatCompilation = Pattern.compile(regexSequence)
.matcher(journal)
.find();
System.out.println("Absence du mot interdit : " + resultatCompilation);
Étapes clés du processus de filtrage
- Importation : Toujours inclure
java.util.regex.Patternetjava.util.regex.Matcher. - Définition du motif : Choisir entre
[^]pour les caractères ou(?! )pour les motifs. - Compilation : Utiliser
Pattern.compile()pour préparer l'expression. - Validation : Appliquer la méthode
matches()pour une correspondance totale oufind()pour une recherche partielle.