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

时间:2012-07-04 13:12:28

标签: 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());

我的逻辑告诉我,无论true是什么,都应始终输出someString。但是:

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

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

2 个答案:

答案 0 :(得分:6)

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

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

之间

答案 1 :(得分:4)

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

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