Classe Pattern de Java

En Java,Patternla classe fait partie des composants essentiels de la fonctionnalité des expressions régulières ; elle appartient aujava.util.regexpaquet.

Une expression régulière est un puissant outil de traitement de texte utilisé pour faire correspondre, rechercher et remplacer des motifs spécifiques dans des chaînes de caractères.

PatternLa fonction principale de la classe est de compiler une expression régulière en un motif pour des opérations de correspondance efficaces ultérieurement.


Introduction aux expressions régulières

Une expression régulière est une syntaxe utilisée pour décrire des motifs de chaînes de caractères. Grâce à des symboles et des règles spécifiques, des règles complexes de correspondance de chaînes peuvent être définies. Par exemple :

  • \dCorrespond à n'importe quel chiffre (équivalent à[0-9])
  • \wCorrespond à toute lettre, tout chiffre ou tout trait de soulignement (équivalent à[a-zA-Z0-9_])
  • a+Correspond à une ou plusieurs lettres consécutivesa
  • ^Correspond au début d'une chaîne
  • $Correspond à la fin d'une chaîne

Utilisation de base de la classe Pattern

Création d'un objet Pattern

PatternLa classe n'a pas de constructeur public ; elle doit être créée via la méthode statiquecompile()pour créer une instance :

Exemple

import java.util.regex.Pattern;

// Compiler l'expression régulière
Pattern pattern = Pattern.compile("a*b");

Méthodes courantes

matcher(CharSequence input)

Crée unMatcherobjet, utilisé pour effectuer des opérations de correspondance sur une chaîne d'entrée :

Exemple

Matcher matcher = pattern.matcher("aaaab");

matches(String regex, CharSequence input)

Une méthode statique qui détermine directement si la chaîne d'entrée correspond complètement à l'expression régulière :

Exemple

boolean isMatch = Pattern.matches("a*b", "aaaab"); // Renvoie true

split(CharSequence input)

Divise la chaîne d'entrée selon l'expression régulière :

Exemple

String[] parts = pattern.split("aaaabtest"); // Renvoie ["", "test"]

Indicateurs d'expression régulière

Lors de la compilation d'une expression régulière, différents indicateurs peuvent être spécifiés pour modifier le comportement de correspondance :

Option Description
Pattern.CASE_INSENSITIVE Ignorer la casse
Pattern.MULTILINE Mode multiligne,^et$correspond au début et à la fin de chaque ligne
Pattern.DOTALL .Correspond à tous les caractères, y compris les terminateurs de ligne
Pattern.UNICODE_CASE Active le repli de casse compatible Unicode

Exemple d'utilisation :

Exemple

// Correspondance insensible à la casse
Pattern pattern = Pattern.compile("a*b", Pattern.CASE_INSENSITIVE);

Applications pratiques de la classe Pattern

Validation du format d'e-mail

Exemple

String emailRegex = "^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$";
Pattern emailPattern = Pattern.compile(emailRegex);

String email = "[email protected]";
boolean isValid = emailPattern.matcher(email).matches();

Extraction des nombres

Exemple

String text = "Price: $123.45";
Pattern numberPattern = Pattern.compile("\\d+\\.?\\d*");
Matcher matcher = numberPattern.matcher(text);

if (matcher.find()) {
    String number = matcher.group(); // "123.45"
}

Remplacement de chaînes

Exemple

String input = "Bonjour, mon numéro de téléphone est 123-456-7890";
Pattern phonePattern = Pattern.compile("\\d{3}-\\d{3}-\\d{4}");
String output = phonePattern.matcher(input).replaceAll("[PHONE]");
// Sortie : "Bonjour, mon numéro de téléphone est [PHONE]"

Conseils d'optimisation des performances

  1. Précompilez les expressions régulières: Les expressions régulières qui doivent être utilisées plusieurs fois doivent être précompilées dans unPatternobjet plutôt que recompilées à chaque fois qu'elles sont utilisées.

  2. Évitez les expressions régulières trop complexes: Les expressions régulières trop complexes peuvent entraîner une dégradation des performances, voire des problèmes de « backtracking catastrophique ».

  3. Utilisez les groupes judicieusement: Les groupes non capturants(?:...)offrent de meilleures performances que les groupes de capture(...)Si vous n'avez pas besoin de capturer le contenu, utilisez des groupes non capturants.


Résumé

PatternLa classe est au cœur de la fonctionnalité d'expression régulière de Java, offrant de puissantes capacités de correspondance de motifs de chaînes. Grâce à une utilisation appropriée de laPatternclasse et sa compagneMatcherclasse, diverses tâches de traitement de chaînes peuvent être efficacement réalisées. Maîtriser les expressions régulières et laPatternutilisation de la classe améliorera grandement les capacités de traitement de texte des développeurs.

Le tableau suivant répertoriePatternles méthodes courantes de la classe:

Méthodes de construction et de compilation

Méthode Description
static Pattern compile(String regex) Compile l'expression régulière en un objet Pattern
static Pattern compile(String regex, int flags) Compile l'expression régulière avec les indicateurs spécifiés
static boolean matches(String regex, CharSequence input) Fait rapidement correspondre l'expression régulière (compilation + correspondance)
static String quote(String s) Convertit la chaîne en un motif littéral (échappe tous les caractères spéciaux)

Constantes de drapeaux (courantes)

Option Description
Pattern.CASE_INSENSITIVE Correspondance insensible à la casse
Pattern.MULTILINE Mode multiligne (^ et $ correspondent au début et à la fin des lignes)
Pattern.DOTALL Le point (.) correspond à tous les caractères, y compris les terminateurs de ligne
Pattern.UNICODE_CASE Active le repli de casse compatible Unicode

Méthodes de correspondance et de découpage

Méthode Description
Matcher matcher(CharSequence input) Crée un objet matcher
String[] split(CharSequence input) Découpe la chaîne d'entrée avec le motif
String[] split(CharSequence input, int limit) Découpage avec une limite
Stream<String> splitAsStream(CharSequence input) Renvoie le flux découpé (Java 8+)

Méthodes d'information sur Pattern

Méthode Description
String pattern() Renvoie l'expression régulière compilée
int flags() Renvoie les indicateurs définis au moment de la compilation
String toString() Renvoie la représentation sous forme de chaîne du motif
Autres extensions