La manière dont les limites des zones interactives avec un certaines formes de modèle peut être modifiée en invoquant des méthodes spécifiques useAnchoringBounds() et useTransparentBounds().

La méthode useAnchoringBounds() fixe l'ancrage des limites d'une zone pour un objet Matcher. L'appel de cette méthode avec un argument booléen true indique à l'objet courant, d'utiliser l'ancrage des limites, c'est à dire, les ancres '^' (début de ligne) et '$' (fin de ligne). Par défaut, un objet Matcher utilise l'ancrage des limites.

if(!correspondance.hasAnchoringBounds())
    correspondance.useAnchoringBounds(true);

La méthode hasAnchoringBounds() indique si l'objet Matcher utilise un ancrage des limites.

La méthode useTransparentBounds() détermine si l'objet doit utiliser des limites de zones transparentes (true) ou opaques (false). Si l'argument est true, cela signifie que les limites de zones sont transparentes pour les modèles de formes de modèles du type lookahead et lookbehind. Dans ce cas, lors de la mise en correspondance, la validation d'une occurrence est soumise au préalable à un contrôle avant ou arrière d'une sous-expression régulière.

if(!correspondance.hasTransparentBounds())
    correspondance.useTransparentBounds(true);

La méthode hasTransparentBounds() indique si l'objet Matcher utilise des limites transparentes.

Exemple [voir]
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Limites {
    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.useAnchoringBounds(true);
        verification(recherche);
        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("\\b\\w+(?<=s)\\b"));
        recherche.useTransparentBounds(true);
        verification(recherche);
        recherche(recherche);
    }
    public static void verification(Matcher recherche) {
        if(recherche.hasAnchoringBounds())
            System.out.println("Utilisation de l'ancrage des limites");
        else
            System.out.println("Utilisation du non-ancrage des limites");
        if(recherche.hasTransparentBounds())
            System.out.println("Utilisation de la transparence des limites");
        else
            System.out.println("Utilisation de l'opacité des limites");
        
    }
    public static void recherche(Matcher recherche) {
        String regexp = recherche.pattern().pattern();
        if(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");
        }
    }
}