Une réinitialisation provoque le déchargement de l'état de l'objet courant, soit les positions de départ et de fin, ainsi que l'occurrence, et place également la position d'ajout à zéro.

La réinitialisation des objets Matcher s'obtient par une invocation des méthodes reset().

L'état d'un objet Matcher est récupérable par l'intermédiaire de la méthode toMatchResult(), retournant un objet de type référence MatchResult.

MatchResult resultat = correspondance.toMatchResult();

De plus, si une zone a été définie, elle est réadaptée à la chaîne de caractères cible entière. Enfin, l'ancrage et la transparence des limites d'une zone sont à leur tour désaffecté.

Matcher correspondance = correspondance.reset();

Il existe deux méthodes reset() pour réinitialiser un objet Matcher, mais l'une d'elle prend comme argument une chaîne de caractères destinée à remplacer la séquence d'entrée de l'objet courant.

Matcher correspondance = 
        correspondance.reset("Une nouvelle chaîne de caractères...");

Le modèle d'expression régulière peut lui aussi être modifié à partir de l'objet Matcher. Pour cela, il suffit de d'appeler la méthode usePattern(), à laquelle il faut passer comme argument un nouvel objet Pattern qui remplacera l'existant.

Matcher correspondance = 
            correspondance.usePattern(Pattern.compile("A.*Z"));
Exemple [voir]
import java.util.regexp.Matcher;
import java.util.regexp.Pattern;

public class Reinitialisation {
    public static void main(String[] args) {
        String cible = 
                "Alors que Newton s'était assoupi sous un pommier, " + 
                "il découvra la gravité...\n" +
                "A son tour, Einstein inventa la théorie de la relativité " + 
                "générale.\n" +
                "Sans succès, Albert Einstein tenta d'unifier les forces " + 
                "qui régissent l'univers !\n" +
                "Aujourd'hui, la théorie des cordes semble être la clé de " + 
                "l'unification des forces.";

        Pattern modele = Pattern.compile("A.*$", Pattern.MULTILINE);
        Matcher recherche = modele.matcher(cible);
        recherche(recherche);
        String sequence = 
                "Jusqu'alors, les deux mondes de l'infiniment grand\n" +
                "et de l'infiniment petit étaient incompatibles.\n" +
                "Le monde microscopique est totalement imprévisible.\n" +
                "Le monde macroscopique est quant à lui prévisible.\n" +
                "La théorie des cordes harmonise ces deux mondes.\n";

        recherche.reset(sequence);
        recherche.usePattern(Pattern.compile("\\bm\\w*\\b"));
        recherche(recherche);
    }

    public static void recherche(Matcher recherche) {
        String regexp = recherche.pattern().pattern();
        while(recherche.find()){
            System.out.println("Une occurrence a été trouvée entre " 
                             + recherche.regionStart() 
                             + " et " 
                             + recherche.regionEnd());
            
            String chaine = recherche.group();
            int debut = recherche.start();
            int fin = recherche.end();

            System.out.println("Modèle     : " + regexp);
            System.out.println("Occurrence : " + chaine);
            System.out.println("Début      : " + debut);
            System.out.println("Fin        : " + fin + "\n");
        }
    }
}