我们有以下代码
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< 似乎表明\D 现在可能与“C”匹配,因此 w+ 不会贪婪地消耗所有字母字符
将其修改为带有尾随空格的“ABC”会再次产生 >ABC<,进一步混淆情况
如果有人能解释什么是正确的解释,我们将不胜感激
最佳答案
and then non-digit \D for the whitespace.
但是空白和下一个字符之间不存在单词边界。
你的正则表达式必须是,
"\\b\\w+(?=\\s)"
关于java - 正则表达式与空格/非数字/单词边界匹配解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32952128/