นิพจน์ด้านล่างควรทำงานได้อย่างถูกต้องเพื่อค้นหาจำนวนคำที่ต่อเนื่องกัน การจับคู่อาจไม่คำนึงถึงตัวพิมพ์เล็กและใหญ่
String regex = "\\b(\\w+)(\\s+\\1\\b)*";
Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(input);
// Check for subsequences of input that match the compiled pattern
while (m.find()) {
input = input.replaceAll(m.group(0), m.group(1));
}
อินพุตตัวอย่าง: Goodbyebye Goodbye GooDbYe
ตัวอย่างผลลัพธ์: ลาก่อน
คำอธิบาย:
นิพจน์ regex:
\ b: จุดเริ่มต้นของขอบเขตคำ
\ w +: อักขระคำจำนวนเท่าใดก็ได้
(\ s + \ 1 \ b) *: ช่องว่างจำนวนเท่าใดก็ได้ตามด้วยคำที่ตรงกับคำก่อนหน้าและสิ้นสุดขอบเขตของคำ สิ่งที่ห่อด้วย * ช่วยในการค้นหาการทำซ้ำมากกว่าหนึ่งครั้ง
การจัดกลุ่ม:
m.group (0): จะมีกลุ่มที่ตรงกันในกรณีด้านบน Goodbyebyebye GooDbYe
m.group (1): จะมีคำแรกของรูปแบบที่ตรงกันในกรณีข้างต้น Goodbye
วิธีการแทนที่จะแทนที่คำที่จับคู่ติดต่อกันทั้งหมดด้วยตัวอย่างแรกของคำ