2016-04-14 9 views
2

benregex tüm sözcük seçeneği

Pattern pattern = Pattern.compile("("+str+")\\b"); 
Matcher matcher = pattern.matcher(line.toLowerCase(Locale.ENGLISH)); 
if(matcher.find()){ 
    //Doing something 
} 

bu verili duruma bir sorun var belli bir çizgide her kelimenin başlangıç ​​endekslerini bulmaktır ne yapmak istediğinizi, java bütün kelimeleri eşleşen ilgili bir sorun var) (

line = "Watson has Watson's items."; 
str = "watson"; 

da diğerini eşleştirme olmadan burada sadece ilk watson ile eşleştirmek istediğiniz ve ben bu durumda

+0

Şunu açıklayabilir misiniz * Benim modelimin boş alan kontrolü olmasını istemiyorum * lütfen? Bir * kelime * ve izin verilen * içerik * için gereksiniminiz nedir? Bilirsiniz, tüm sözcüklerden sonra kesme işlemlerine izin vermek için '(?! ') Gibi bir göz atabilirsin. –

+1

Eğer ilk 'watson'un başlangıç ​​indeksini istiyorsanız, neden' ​​String # indexOf' işlevini kullanmıyorsunuz? – SomeJavaGuy

+0

@ WiktorStribiyeni kesme işaretleri sadece bir örnektir. – user3430912

cevap

1

kelime sınır \b (bir kelime karakterinden sonra/önce veya başlangıç ​​/ bitiş) olmayan bir kelime ve bir kelime karakteri arasındaki yeri eşleştiğinde bakın. ', -, +, vb. kelime içermeyen karakterleridir, bu nedenle Watson\bWatson's (kısmi eşleşme) ile eşleşir.

o boşluk olmayan sembollerle kapalı değilse, yalnızca Watson eşleşmesini isteyebilirsiniz

: cümlenin sonuna Watson eşleştirmek için

Pattern p = Pattern.compile("(?<!\\S)" + str + "(?!\\S)"); 

, sen eşleştirme önce ., ? izin gerekecek ve !, regex demo

Bkz

Pattern p = Pattern.compile("(?<!\\S)" + str + "(?![^\\s.!?])"); 

kullanmakSadece FYI: Belki de str özel regex meta karakterleri içerdiğinde sorunları önlemek için Pattern.quote(str) düz str yerine kullanmak iyi bir fikirdir.

0

Kullanım bulmak ne yapmalıyım, bazı boş alan kontrole sahip olmak benim desen istemiyorum ben mi metod ile Eşleştirici içinde

java docs

+0

i zaten bulma yöntemini kullandı – user3430912