2017-03-20 205 views
4

我想檢查一個字符串是否包含整個字,使用Java。下面是一些例子:Java正則表達式:匹配整個單詞與字邊界

Text : "A quick brown fox" 
Words: 
"qui" - false 
"quick" - true 
"quick brown" - true 
"ox" - false 
"A" - true 

下面是我的代碼:

String pattern = "\\b(<word>)\\b"; 
String s = "ox"; 
String text = "A quick brown fox".toLowerCase(); 
System.out.println(Pattern.compile(pattern.replaceAll("<word>", s.toLowerCase())).matcher(text).find()); 

它正常工作與像我在上面的例子中提到的一個字符串。不過,我得到不正確的結果,如果輸入字符串具有字符,如%(等,例如:

Text : "c14, 50%; something (in) bracket" 
Words: 
"c14, 50%;" : false 
"(in) bracket" : false 

它是與我的regex模式(或者也許我做的整個模式匹配錯誤)。任何人都可以給我一個更好的方法。

+0

使用'String pattern =「(?<!\\ w)」+ Pattern.quote(word)+「(?!\\ w)」;','\ b'是一個依賴於上下文的模式。 –

+0

您需要在您的單詞列表中轉義正則表達式特殊字符。否則,告訴由引擎解釋。 –

+0

@WiktorStribiżew謝謝,它似乎涵蓋了大部分情況,除了'c14,50%'和'c14,50'它應該返回'false'嗎? –

回答

5

看起來你只想匹配用空格(或在字符串的開始/結尾)包圍的「單詞」。

使用

String pattern = "(?<!\\S)" + Pattern.quote(word) + "(?!\\S)"; 

(?<!\S)負回顧後會失敗被立即前面有比空白和(?!\s)以外的字符所有比賽是一種消極的前瞻將會失效一切都緊跟其他一個字符匹配比空白。 Pattern.quote()對於需要在正則表達式中需要被視爲文字字符的特殊字符是必要的。

+1

就是這樣!謝謝.. –

0

嘗試使用反斜槓轉義特殊字符。他們可以在一個模式中有其他含義。

小改正:可能你甚至需要兩個反斜槓,因爲反斜槓本身是一個字符串中的特殊字符。

相關問題