next up previous
suivant: Exercice 1 monter: Expressions régulières en Java précédent: Introduction

Exemple d'utilisation

Nous allons prendre comme exemple la recherche de nombres entiers dans une chaîne de caractères. Nous allons d'abord chercher le premier nombre dans une chaîne saisie au clavier.

import java.util.regex.*;
public class ExtractInt{
    public static void main(String[] args){
        String st;
        Pattern motif;
        Matcher match;
        System.out.println("Entrez la chaîne à analyser");
        st = System.console().readLine();
        // l'expression régulière
        motif = Pattern.compile("(0|1|2|3|4|5|6|7|8|9)+");
        match = motif.matcher(st);
        if (match.find()){
            // le motif est trouvé
            System.out.println("Le nombre trouvé est: " +match.group());
        }else{
            System.out.println("Aucun nombre détecté dans la chaîne");
        }
    }
}

On voit dans cet exemple que l'objet instance de Pattern représente une expression régulière donné au moyen d'une chaîne de caractère. Dans cette chaîne, les chiffres sont considérés comme des symboles, la barre verticale et le + comme des opérateurs et les parenthèses sont utilisées pour définir la portée de l'opérateur +. Cet objet n'est pas créé au moyen d'un new (il n'y a pas de constructeur dans la classe Pattern) mais avec une méthode de classe (méthode static) qui s'appelle compile.

Ensuite une instance de Matcher est créée qui a pour but de rechercher des occurrences du motif dans une chaîne donnée. Dans notre exemple, la chaîne est entrée au clavier. L'objet instance de Matcher est créé par la méthode match de l'objet Pattern.

La méthode find permet de trouver la première occurrence du motif et la méthode group d'avoir la sous-chaîne qui correspond à cette première occurrence. Dans notre exemple, c'est le premier nombre (sous forme d'une chaîne de caractère String du point de vue de son type java).

Voici quelques exemples d'exécution.

> java ExtractInt
Entrez la chaîne à analyser
sqdfsqd 12sqd 56
Le nombre trouvé est: 12
> java ExtractInt
Entrez la chaîne à analyser
zaegfgfrzaegyryizaeyyugzaet
Aucun nombre détecté dans la chaîne
> java ExtractInt
Entrez la chaîne à analyser
fsqdfsqdfsqd124fsqdfsqd89fsqd12
Le nombre trouvé est: 124

Si on appelle deux fois find, le premier appel cherche la première occurrence et le second appel cherche la deuxième occurrence. Plus précisément, la recherche commence après la fin de la première occurrence trouvée. Si l'on veut toutes les occurrences du motif, il faut appeler en boucle la méthode find.

import java.util.regex.*;
public class ExtractInt2{
    public static void main(String[] args){
        String st;
        Pattern motif;
        Matcher match;
        System.out.println("Entrez la chaîne à analyser");
        st = System.console().readLine();
        // l'expression régulière
        motif = Pattern.compile("(0|1|2|3|4|5|6|7|8|9)+");
        match = motif.matcher(st);
        int nb = 1;
        while (match.find()){
            // le motif est trouvé
            System.out.println("Le nombre numéro " + nb + " est: " +
                               match.group());
            nb++;
        }
        if (nb==1){
            System.out.println("Aucun nombre n'est trouvé");
        }
    }
}

Voici deux exécutions du programme.

> java ExtractInt2
Entrez la chaîne à analyser
12fsqdfsqd58fsqdfsdq98fsqd45
Le nombre numéro 1 est: 12
Le nombre numéro 2 est: 58
Le nombre numéro 3 est: 98
Le nombre numéro 4 est: 45
> java ExtractInt2
Entrez la chaîne à analyser
fsqdfsqdfsqd
Aucun nombre n'est trouvé

On peut écrire différemment le motif qui recherche les nombres. On peut utiliser une classe decaractère avec un intervalle. Le motif s'écrit alors: "[0-9]+". On peut également utiliser la classe prédéfinie des chiffres qui s'écrit \d. Dans la chaîne java utilisée pour créer le motif, il faut doubles toutes les barres obliques (mécanisme d'échappement). Il faut écrire: Pattern.compile("\\d+").

Pour avoir une description complète de la syntaxe des expressions régulières, consultez la documentation de la classe Pattern: https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html


next up previous
suivant: Exercice 1 monter: Expressions régulières en Java précédent: Introduction
barthe 2016-01-20