Ya, ketidakpekaan huruf besar / kecil dapat diaktifkan dan dinonaktifkan sesuka hati di regex Java.
Sepertinya Anda menginginkan yang seperti ini:
System.out.println(
"Have a meRry MErrY Christmas ho Ho hO"
.replaceAll("(?i)\\b(\\w+)(\\s+\\1)+\\b", "$1")
);
// Have a meRry Christmas ho
Perhatikan bahwa bendera yang disematkan tidak . Perhatikan juga yang satu itu berlebihanPattern.CASE_INSENSITIVE
(?i)
\?i
\b
telah dihilangkan dari pola.
Itu (?i)
ditempatkan di awal pola untuk mengaktifkan case-insensitivity. Dalam kasus khusus ini, itu tidak akan diganti nanti dalam pola, jadi pada dasarnya seluruh pola peka huruf besar kecil.
Perlu dicatat bahwa sebenarnya Anda dapat membatasi ketidakpekaan huruf besar / kecil hanya pada sebagian dari keseluruhan pola. Jadi, pertanyaan di mana harus meletakkannya sangat tergantung pada spesifikasinya (meskipun untuk masalah khusus ini sejak itu tidak menjadi masalah\w
tidak peka huruf besar / kecil.
Untuk mendemonstrasikan, berikut adalah contoh serupa dari runtuhnya rangkaian huruf like "AaAaaA"
to just "A"
.
System.out.println(
"AaAaaA eeEeeE IiiIi OoooOo uuUuUuu"
.replaceAll("(?i)\\b([A-Z])\\1+\\b", "$1")
); // A e I O u
Sekarang misalkan kita menetapkan bahwa proses hanya boleh diciutkan hanya jika dimulai dengan huruf besar. Kemudian kita harus meletakkannya (?i)
di tempat yang sesuai:
System.out.println(
"AaAaaA eeEeeE IiiIi OoooOo uuUuUuu"
.replaceAll("\\b([A-Z])(?i)\\1+\\b", "$1")
); // A eeEeeE I O uuUuUuu
Secara lebih umum, Anda dapat mengaktifkan dan menonaktifkan flag apa pun di dalam pola sesuai keinginan.
Lihat juga
Pertanyaan-pertanyaan Terkait