Non-greedy Regular Expression in Java
问题 I have next code: 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)); } } } And have next output: word w But in my opinion it must be: word word Somebody please explain me why so? 回答1: Because your patterns are non-greedy, so they matched as little text as