हां, जावा रेगेक्स में वसीयत असंवेदनशीलता सक्षम और अक्षम की जा सकती है।
ऐसा लगता है कि आप कुछ इस तरह चाहते हैं:
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
आम तौर पर, आप अपनी इच्छानुसार किसी भी ध्वज को पैटर्न के भीतर सक्षम और अक्षम कर सकते हैं।
यह सभी देखें
संबंधित सवाल