Java中的非贪婪正则表达式

我有下一个代码:

public static void createTokens(){ String test = "test is a word word word word big small"; Matcher mtch = Pattern.compile("test is a (\\s*.+?\\s*) word (\\s*.+?\\s*)").matcher(test); while (mtch.find()){ for (int i = 1; i <= mtch.groupCount(); i++){ System.out.println(mtch.group(i)); } } } 

并有下一个输出:

 word w 

但在我看来,它一定是:

 word word 

有人请解释我为什么这样?

因为你的模式不是贪婪的,所以它们尽可能地匹配尽可能少的文本,同时仍然包含匹配。

除掉 ? 在第二组,你会得到

单词大小

 Matcher mtch = Pattern.compile("test is a (\\s*.+?\\s*) word (\\s*.+\\s*)").matcher(test); 

通过使用\\s* ,它将匹配任意数量的空格,包括0个空格。 w匹配(\\s*.+?\\s*) 。 要确保它匹配由空格分隔的单词,请尝试(\\s+.+?\\s+)