提问者:小点点

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模式有关(或者可能我错误地进行了整个模式匹配)。有人能给我建议一个更好的方法吗?


共2个答案

匿名用户

似乎您只想匹配用空格括起来的“单词”(或字符串的开头/结尾)。

使用

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

的<代码>(?

匿名用户

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

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