2013-07-22 47 views
12

karakter kümesinin son sonundaki yinelenen karakterleri olan bir sözcüğü tanımlayan bir regex yazmam gerekiyor. Aşağıdaki kod parçasına göre, yinelenen karakter kümesi An'dur. Bir regex yazmam gerekiyor, bu yüzden tespit edilecek ve görüntülenecek.Tekrarlama karakterlerini algılamak için düzenli ifade yazma

Aşağıdaki kodda, \\w tüm sözcük karakterleri (rakam, harf veya özel karakter dahil) ile eşleşecektir. Ama sadece ingilizce karakterleri tanımlamak istiyorum.

String stringToMatch = "IranAnAn"; 
Pattern p = Pattern.compile("(\\w)\\1+"); 
Matcher m = p.matcher(stringToMatch); 
if (m.find()) 
{ 
    System.out.println("Word contains duplicate characters " + m.group(1)); 
} 

GÜNCELLEME

Word contains duplicate characters a 
Word contains duplicate characters a 
Word contains duplicate characters An 
+3

Kaç karakter "tekrarlanıyor" olarak kabul edilir? Banana'yı (geçerli bir kelime olmasına rağmen) ve “mama” (sadece tekrarlayan setleri) işaretlemek istiyor musunuz? Hayvanat bahçesi - tek bir karakteri tekrar etme - ya da 'tomtom' (üç karakteri tekrarlama). "Sadece İngilizce karakterler" eşleşmesini istiyorsanız, karakterin eşleşmesi için [A-Za-z] 'yi kullanın. – Floris

cevap

8

Sen mümkün olduğunca sette sayıda karakter yakalamak istiyorum, bu yüzden yerine (\\w) size (\\w+) kullanmalıdır ve ihtiyacınız böylece, dizi sonunda olmak istiyorum $ eklemek için (ve kaldırdık + tekrarını tespit etmek için kullanışlı olmadığı \\1 sonra: tek tekrarlama tabi):

Pattern p = Pattern.compile("(\\w+)\\1$"); 

Programınız, beklendiği gibi An çıktılar.

Pattern p = Pattern.compile("([a-zA-Z]+)\\1$"); 

Ve eğer isterseniz karakter en az 2 karakter olarak ayarlanır:

Son olarak, yalnızca ASCII karakterleri yakalamak istiyorsanız, \\w yerine [a-zA-Z] kullanabilirsiniz

Pattern p = Pattern.compile("([a-zA-Z]{2,})\\1$"); 
+0

Hayır işe yaramıyor. verdiğim çıktıyı ekledim. Ayrıca "a" da algılar. Sadece ardışık karakterleri tespit etmek istiyorum. –

+0

@sharonHwk Anladığımdan emin değilim. 'IranAnn' girdisi ile 'An' kelimesini bulmayı beklediğinizi düşündüm - bu demek istediğin şey değil mi? Güncellemenizde, neden yinelenen bir karakter olarak düşünülmelidir? – assylias

+0

Sadece yinelenen bir "An" algıladığında çıktı olmasını istiyorum. Fakat yinelenen bir "a" algıladığında çıktı verir. –

1

"Yalnızca İngilizce karakterlerle", AZ ve az anlamına gelirseniz, aşağıdaki ifadeler çalışır:

+0

Hayır işe yaramıyor. verdiğim çıktıyı ekledim. Ayrıca "a" da algılar. Sadece ardışık karakterleri tespit etmek istiyorum. –

+2

[unicode tablosu] (http://unicode-table.com/en/#0060) A 've' z' arasında, ['\'] '' '' '' gibi başka karakterler de vardır. \ '. [A-Za-z] 'daha hassastır. – Pshemo

+0

@Pshemo Giriş için teşekkürler, bu sorunun farkında değildim! –