我有一个相当特殊的问题。我正试图找到像[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
,但我不确定其含义。
答案 0 :(得分:6)
点然后空格不是单词边界。
单词边界在单词字符之间,然后是非单词字符,反之亦然
即在[a-zA-Z0-9_][^a-zA-Z0-9_]
或[^a-zA-Z0-9_][a-zA-Z0-9_]
答案 1 :(得分:4)
单词边界是一个非单词字符,前面是单词字符,反之亦然。以句点(2个非单词字符)开头的空格不符合此要求。
使用\W
的效果是任何非单词字符都将匹配(与\b
相同,但没有条件是字符前面有单词字符),这似乎是正确的为你的例子。