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

Dar*_*hta 6 java regex string

我正在尝试使用Java检查字符串是否包含整个单词.以下是一些例子:

Text : "A quick brown fox"
Words:
"qui" - false
"quick" - true
"quick brown" - true
"ox" - false
"A" - true
Run Code Online (Sandbox Code Playgroud)

以下是我的代码:

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());
Run Code Online (Sandbox Code Playgroud)

它与我在上面的例子中提到的字符串一样正常工作.但是,如果输入字符串包含类似等字符%,则会得到不正确的结果(,例如:

Text : "c14, 50%; something (in) bracket"
Words:
"c14, 50%;" : false
"(in) bracket" : false
Run Code Online (Sandbox Code Playgroud)

它与我的regex模式有关(或者我正在做错误的整个模式匹配).谁能建议我一个更好的方法.

Wik*_*żew 6

看起来你只想匹配用空格(或在字符串的开头/结尾)包含的"单词".

使用

String pattern = "(?<!\\S)" + Pattern.quote(word) + "(?!\\S)";
Run Code Online (Sandbox Code Playgroud)

(?<!\S)负回顾后会失败被立即前面有一个比其他空格一个字符,所有的比赛(?!\s)是一种消极的前瞻将会失效所有被紧随其后与除空白,一个字符匹配.Pattern.quote()有必要逃避需要在正则表达式模式中被视为文字字符的特殊字符.