Expressions Régulières en Java

Introduction aux Expressions Régulières

Les expressions régulières (ou regex) sont un langage puissant utilisé pour la recherche et le traitement de texte selon des motifs précisés. Dans le langage Java, elles sont intégrées grâce aux classes Pattern et Matcher. La classe Pattern est utilisée pour représenter une expression régulière compilée, tandis que la classe Matcher applique cette expression sur des chaînes de caractères. Il est possible d'utiliser plusieurs instances de Matcher avec une seule instance de Pattern. Ces deux classes se trouvent dans le package java.util.regex.

Utilisation de la classe Pattern

Pour exploiter les expressions régulières en Java, on commence par créer une instance de la classe Pattern qui représente notre expression régulier. La syntaxe pour cela est :

Pattern p = Pattern.compile(re, flags);

Ici, re désigne le motif de l'expression et flags est un masque d'entier optionnel qui indique des options supplémentaires.

Les options disponibles incluent : - Pattern.CASE_INSENSITIVE : correspondance sans tenir compte de la casse. - Pattern.MULTILINE : permet aux caractères ^ et $ de correspondre au début et à la fin de chaque ligne. - Pattern.DOTALL : le caractère . correspond à n'importe quel caractère, y compris les terminaisons de ligne.

Ce qui suit est un aperçu des principales méthodes présentes dans la classe Pattern : - .compile(pattern, flags) : méthode statique retournant une instance de Pattern à partir d'un motif donné. - .matcher(input) : retourne un Matcher pour appliquer le motif sur le texte fourni. - .split(input, limit) : retourne un tableau en divisant le texte selon les correspondances trouvées.

Utilisation de la classe Matcher

L'instance de la classe Matcher permet d'exécuter des opérations sur un texte d'entrée à l'aide d'une instance de Pattern. Pour créer un object Matcher, vous utilisez la syntaxe suivante :

Matcher m = pattern.matcher(input);

Ici, pattern est l'instance de Pattern déjà compilée et input est le texte sur lequel vous souhaitez effectuer une recherche. Le Matcher peut rechercher dans l'ensemble du texte, ou dans une région spécifique, en trouvant chaque correspondance ainsi que leur position.

Quelques méthodes importantes de la classe Matcher : - .find(start) : essaie de trouver la prochaine correspondance à partir de l'index spécifié. - .group(group) : retourne le texte correspondant de la dernière correspondance effectuée. - .replaceAll(replacement) : remplace toutes les occurrences trouvées par une chaîne de remplacement.

Exemple d'Utilisation des Expressions Régulières

Voici un exemple pratique qui trouve tous les mots qui commencent par "s" et qui contiennent un "e" en seconde ou troisième position :

import java.util.regex.*;

public class Exemple {
    public static void main(String args[]) {
        Pattern p = Pattern.compile("s.?e[a-z]+");
        Matcher m = p.matcher("Susie vend des coquillages sur la plage.");
        boolean matchFound = m.find();
        while (matchFound) {
            System.out.println(m.group());
            matchFound = m.find();
        }
    }
}

Cette instruction produira les résultats suivants :

vends
coquillages
sur