হ্যাঁ, জাভা রেজেক্সে কেস সংবেদনশীলতা ইচ্ছামতো সক্ষম এবং অক্ষম করা যেতে পারে।
দেখে মনে হচ্ছে আপনি এরকম কিছু চান:
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)
কেস-insensitivity সক্ষম করতে প্যাটার্ন শুরুতে স্থাপন করা হয়। এই বিশেষ ক্ষেত্রে এটি পরে ধরণীতে ওভাররাইড করা হয় না, সুতরাং কার্যত পুরো প্যাটার্নটি কেস-সংবেদনশীল।
এটি লক্ষণীয় যে বাস্তবে আপনি পুরো প্যাটার্নের কেবলমাত্র অংশে ক্ষেত্রে-সংবেদনশীলতা সীমাবদ্ধ করতে পারেন। সুতরাং, এটি কোথায় রাখা উচিত তা নির্ভর করে স্পেসিফিকেশনের উপর নির্ভর করে (যদিও এই বিশেষ সমস্যার জন্য এটি \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
আরও সাধারণভাবে, আপনি নিজের ইচ্ছে মতো প্যাটার্নের মধ্যে কোনও পতাকা সক্ষম এবং অক্ষম করতে পারেন।
আরো দেখুন
সম্পর্কিত প্রশ্নগুলি