【发布时间】:2015-10-05 15:20:45
【问题描述】:
我们有以下代码
String str = "ABC 2015 ABC1";
Pattern pattern = Pattern.compile("\\b\\w+\\D\\b");
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
System.out.println(">" + matcher.group() + "<");
}
我们的假设是它应该匹配 ABC 和 2015 与周围的单词边界(不消耗字符),w+ 单词字符匹配子串本身,然后非数字 \D 匹配空白。 ABC1 不应该匹配,因为后面没有空格
结果打印输出
>ABC <
>2015 <
似乎证实了这一点,但是稍微改变 str 开始引发对上述匹配解释是否正确的怀疑。例如
将其修改为带有尾随空格的“ABC 2015 ABC1”似乎会产生完全相同的结果,但不匹配 >ABC1
将其修改为“ABC”且没有尾随空格会产生 >ABC
将其修改为带有尾随空格的“ABC”会再次产生 >ABC
如果有人能解释正确的解释,将不胜感激
【问题讨论】: