2017-03-20 156 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

尝试使用反斜杠转义特殊字符。他们可以在一个模式中有其他含义。

小改正:可能你甚至需要两个反斜杠,因为反斜杠本身是一个字符串中的特殊字符。

相关问题