2016-04-14 26 views
2

Ich habe ein Problem über ganze Wörter in Java übereinstimmt, was ich die Startindizes tun wollenregex ganze Wort Option

in einer bestimmten Zeile jedes Wort findet
Pattern pattern = Pattern.compile("("+str+")\\b"); 
Matcher matcher = pattern.matcher(line.toLowerCase(Locale.ENGLISH)); 
if(matcher.find()){ 
    //Doing something 
} 

ich ein Problem mit diesem konkreten Fall haben

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

ich möchte hier nur mit dem ersten watson übereinstimmen, ohne dass die anderen passenden und i dont mein Muster wollen einige leere Raum Kontrolle haben, was soll ich in diesem Fall tun

+0

Könnten Sie klarstellen * ich möchte nicht, dass mein Muster eine Leerraumkontrolle hat * bitte? Was ist Ihre Anforderung für ein * Wort * und seinen erlaubten * Kontext *? Sie können einen Lookahead wie '(?! ')' Anhängen, um Apostrophe nach ganzen Wörtern zu verhindern. –

+1

Wenn Sie den Startindex des ersten 'Watson' wollen, warum benutzen Sie nicht die Funktion' String # indexOf'? – SomeJavaGuy

+0

@ WiktorStribiżew Apostrophe sind nur ein Beispiel. Ich möchte überprüfen, -, + oder andere Nicht-Wort-Zeichen – user3430912

Antwort

1

Die Wortgrenze \b entspricht die Position zwischen einem nicht-Wort und einem Wortzeichen (oder Anfang/Ende vor/nach einem Wortzeichen). Die 10, -, + usw. sind Nicht-Wort Zeichen, so Watson\b wird in Watson's übereinstimmen (teilweise Übereinstimmung).

Sie möchten vielleicht nur Watson passen, wenn es nicht mit Nicht-Leerzeichen Symbole eingeschlossen ist:

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

Um Watson am Ende des Satzes zu entsprechen, müssen Sie passende ermöglichen, bevor ., ? und ! verwenden

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

Siehe regex demo

Nur FYI: vielleicht ist es eine gute Idee, auch Pattern.quote(str) anstelle von einfach str zu verwenden, um Probleme zu vermeiden, wenn Ihr str spezielle Regex-Metazeichen enthält.

0

Verwendung finden() mich ThOD in Matcher

Siehe java docs

+0

Ich habe bereits die Methode find verwendet – user3430912