Evet, büyük / küçük harf duyarlılığı isteğe bağlı olarak Java regex'te etkinleştirilebilir ve devre dışı bırakılabilir.
Görünüşe göre böyle bir şey istiyorsun:
System.out.println(
"Have a meRry MErrY Christmas ho Ho hO"
.replaceAll("(?i)\\b(\\w+)(\\s+\\1)+\\b", "$1")
);
// Have a meRry Christmas ho
Not gömülü Pattern.CASE_INSENSITIVE
bayrak (?i)
değil \?i
. Ayrıca modelden gereksiz bir tane \b
çıkarıldığına da dikkat edin.
Büyük (?i)
/ küçük harf duyarlılığını etkinleştirmek için modelin başlangıcına yerleştirilir. Bu özel durumda, modelde daha sonra geçersiz kılınmaz, dolayısıyla aslında tüm model büyük / küçük harfe duyarlı değildir.
Aslında, büyük / küçük harf duyarlılığını tüm modelin yalnızca bölümleriyle sınırlayabileceğinizi belirtmek gerekir. Bu nedenle, onu nereye koyacağınız sorusu gerçekten spesifikasyona bağlıdır (ancak bu özel problem için önemli değildir \w
, çünkü büyük / küçük harfe duyarlı değildir.
Göstermek için, burada olduğu gibi harflerin ishal çöken benzer bir örnek "AaAaaA"
lazım "A"
.
System.out.println(
"AaAaaA eeEeeE IiiIi OoooOo uuUuUuu"
.replaceAll("(?i)\\b([A-Z])\\1+\\b", "$1")
); // A e I O u
Şimdi, çalışmanın yalnızca büyük harfle başlıyorsa daraltılması gerektiğini belirttiğimizi varsayalım. O zaman (?i)
uygun yere koymalıyız :
System.out.println(
"AaAaaA eeEeeE IiiIi OoooOo uuUuUuu"
.replaceAll("\\b([A-Z])(?i)\\1+\\b", "$1")
); // A eeEeeE I O uuUuUuu
Daha genel olarak, kalıp içindeki herhangi bir bayrağı istediğiniz gibi etkinleştirebilir ve devre dışı bırakabilirsiniz.
Ayrıca bakınız
İlgili sorular