Oui, l'insensibilité à la casse peut être activée ou désactivée à volonté dans les expressions rationnelles de Java.
Il semble que vous souhaitiez quelque chose comme ceci :
System.out.println(
"Have a meRry MErrY Christmas ho Ho hO"
.replaceAll("(?i)\\b(\\w+)(\\s+\\1)+\\b", "$1")
);
// Have a meRry Christmas ho
Il convient de noter que le incorporé Pattern.CASE_INSENSITIVE
est (?i)
no \?i
. Notez également qu'un \b
a été supprimée du modèle.
En (?i)
est placé au début du motif pour permettre l'insensibilité à la casse. Dans ce cas particulier, il n'est pas remplacé plus loin dans le motif, de sorte que l'ensemble du motif est insensible à la casse.
Il convient de noter qu'il est possible de limiter la sensibilité à la casse à certaines parties du modèle. Ainsi, la question de savoir où la placer dépend vraiment de la spécification (bien que pour ce problème particulier, cela n'ait pas d'importance puisque \w
est insensible à la casse.
En guise de démonstration, voici un exemple similaire de regroupement de séries de lettres telles que "AaAaaA"
pour seulement "A"
.
System.out.println(
"AaAaaA eeEeeE IiiIi OoooOo uuUuUuu"
.replaceAll("(?i)\\b([A-Z])\\1+\\b", "$1")
); // A e I O u
Supposons maintenant que nous spécifions que l'exécution ne doit être réduite que si elle commence par une lettre majuscule. Dans ce cas, nous devons placer l'élément (?i)
à l'endroit approprié :
System.out.println(
"AaAaaA eeEeeE IiiIi OoooOo uuUuUuu"
.replaceAll("\\b([A-Z])(?i)\\1+\\b", "$1")
); // A eeEeeE I O uuUuUuu
Plus généralement, vous pouvez activer et désactiver à votre guise n'importe quel indicateur du modèle.
Voir aussi
Questions connexes