Java Regex:将整个单词与单词边界匹配

时间:2017-03-20 13:04:18

标签: java regex string

我正在尝试使用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模式有关(或者我可能错误地进行了整个模式匹配)。任何人都可以建议我一个更好的方法。

2 个答案:

答案 0 :(得分:6)

看起来你只想匹配用空格包围的“单词”(或在字符串的开头/结尾)。

使用

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

(?<!\S)否定后瞻将使所有匹配的前一个字符前面都有一个字符而不是空格而(?!\s)是一个否定的前瞻,这将使所有匹配后立即失败的字符串失败空白。 Pattern.quote()是必要的,以逃避需要在正则表达式模式中被视为文字字符的特殊字符。

答案 1 :(得分:0)

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

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