Gestion de l'exclusion et de la négation dans les expressions régulières Java

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.

  1. 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);
   }
}
  1. 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.");
}
  1. 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.Pattern et java.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 ou find() pour une recherche partielle.

Étiquettes: Java regex pattern-matching java.util.regex

Publié le 19 juillet à 19h26