5

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

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

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

  • 如果someString以单词字符结尾(例如“abc”),true则输出;
  • 如果someString以单词边界(例如“abc.”)结尾,false则输出。

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

4

2 回答 2

6

一个点然后一个空格不是单词边界。

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

于 2012-07-04T13:21:13.860 回答
4

单词边界是前面有单词字符的非单词字符,反之亦然。句点前面的空格(2 个非单词字符)不符合此要求。

使用的效果\W是任何非单词字符都将被匹配(与 相同\b,但没有字符前面有单词字符的条件),这对于您的示例来说似乎是正确的。

于 2012-07-04T13:18:14.440 回答