ใช่สามารถเปิดใช้งานและปิดใช้งานตัวพิมพ์เล็กและใหญ่ได้ตามต้องการใน Java regex
ดูเหมือนว่าคุณต้องการสิ่งนี้:
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
โดยทั่วไปคุณสามารถเปิดและปิดการตั้งค่าสถานะใดก็ได้ภายในรูปแบบตามที่คุณต้องการ
ดูสิ่งนี้ด้วย
คำถามที่เกี่ยวข้อง