Так, нечутливість регістру може бути включена та відключена за бажанням у Java-регексе.
Схоже, ви хочете щось подібне:
System.out.println(
"Have a meRry MErrY Christmas ho Ho hO"
.replaceAll("(?i)\\b(\\w+)(\\s+\\1)+\\b", "$1")
);
// Have a meRry Christmas ho
Зауважте, що вбудований Pattern.CASE_INSENSITIVE
прапор - (?i)
ні \?i
. Зауважте також, що одне зайве \b
було вилучено із шаблону.
Значок (?i)
розміщується на початку шаблону, щоб увімкнути нечутливість до випадку. У цьому конкретному випадку вона не буде відмінена пізніше в шаблоні, тому по суті вся модель є нечутливою до регістру.
Варто відзначити, що насправді ви можете обмежити нечутливість випадків лише до частин усього малюнка. Таким чином, питання про те, куди його покласти насправді, залежить від специфікації (хоча для цієї конкретної проблеми це не має значення, оскільки \w
він нечутливий до регістру.
Щоб продемонструвати, ось подібний приклад згортання рядів букв, як "AaAaaA"
просто "A"
.
System.out.println(
"AaAaaA eeEeeE IiiIi OoooOo uuUuUuu"
.replaceAll("(?i)\\b([A-Z])\\1+\\b", "$1")
); // A e I O u
Тепер припустимо, що ми визначаємо, що запуск слід згортати лише в тому випадку, якщо він починається з великої літери. Тоді ми повинні поставити (?i)
у відповідне місце:
System.out.println(
"AaAaaA eeEeeE IiiIi OoooOo uuUuUuu"
.replaceAll("\\b([A-Z])(?i)\\1+\\b", "$1")
); // A eeEeeE I O uuUuUuu
Більш загально, ви можете вмикати та вимикати будь-який прапор у межах шаблону за своїм бажанням.
Дивитися також
Пов'язані питання