当前面的字符是单词边界时,\ b不匹配

Fel*_*lix 5 java regex

我有一个相当特殊的问题.我正试图找到一个类似的模式[some string][word boundary].简化,我的代码是:

final Pattern pattern = Pattern.compile(Pattern.quote(someString) + "\\b");
final String value = someString + " ";
System.out.println(pattern.matcher(value).find());
Run Code Online (Sandbox Code Playgroud)

我的逻辑告诉我这应该总是输出true,不管是什么someString.然而:

  • 如果someString以字符结尾(例如"abc"),true则输出;
  • 如果someString以字边界结束(例如"abc."),false则输出.

有什么想法发生了什么?我目前的解决方法是使用\W而不是\b,但我不确定其含义.

Boh*_*ian 6

点然后空格不是单词边界.

单词边界在单词字符之间,然后是非单词字符,反之亦然.
即在[a-zA-Z0-9_][^a-zA-Z0-9_]或之间[^a-zA-Z0-9_][a-zA-Z0-9_]