Aşağıdaki ifade, herhangi bir sayıda ardışık sözcük bulmak için doğru şekilde çalışmalıdır. Eşleştirme, büyük / küçük harfe duyarlı olmayabilir.
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));
}
Örnek Giriş: Hoşçakal GooDbYe
Örnek Çıktı: Hoşçakal
Açıklama:
Normal ifade ifadesi:
\ b: Bir sözcük sınırının başlangıcı
\ w +: Herhangi bir sayıda kelime karakteri
(\ s + \ 1 \ b) *: Önceki kelimeyle eşleşen ve kelime sınırını sona erdiren kelimenin izlediği herhangi bir sayıda boşluk. * İçine sarılmış olan her şey, birden fazla tekrar bulmaya yardımcı olur.
Gruplama:
m.group (0): Yukarıdaki durumda elveda GooDbYe'deki eşleşen grubu içerecek
m.grup (1): Yukarıdaki Hoşçakal durumunda eşleşen kalıbın ilk kelimesini içerecektir
Değiştirme yöntemi, birbirini izleyen tüm eşleşen kelimeleri, kelimenin ilk geçtiği yerle değiştirecektir.