Oui, l'insensibilité à la casse peut être activée et désactivée à volonté dans Java regex.
Il semble que vous vouliez 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
Notez que l' indicateur incorporé ne l' Pattern.CASE_INSENSITIVE
est (?i)
pas \?i
. Notez également qu'un superflu \b
a été supprimé du motif.
Le (?i)
est placé au début du modèle pour activer l'insensibilité à la casse. Dans ce cas particulier, il n'est pas remplacé plus tard dans le modèle, donc en fait le modèle entier est insensible à la casse.
Il est à noter qu'en fait, vous pouvez limiter l'insensibilité à la casse à seulement certaines parties du modèle entier. Ainsi, la question de savoir où le mettre dépend vraiment de la spécification (bien que pour ce problème particulier, cela n'a pas d'importance car il \w
est insensible à la casse.
Pour démontrer, voici un exemple similaire de réduction de séries de lettres comme "AaAaaA"
juste "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. Ensuite, il faut mettre le (?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 n'importe quel indicateur dans le modèle comme vous le souhaitez.
Voir également
java.util.regex.Pattern
- regular-expressions.info/Modifiers
- Spécification des modes à l'intérieur de l'expression régulière
- Au lieu de
/regex/i
( Pattern.CASE_INSENSITIVE
en Java), vous pouvez faire/(?i)regex/
- Activation et désactivation des modes pour une partie seulement de l'expression régulière
- Vous pouvez aussi faire
/first(?i)second(?-i)third/
- Étendues de modificateur
- Vous pouvez aussi faire
/first(?i:second)third/
- regular-expressions.info/Word Boundaries (il y a toujours un
\b
entre a \w
et a \s
)
Questions connexes