mam następny kod:dla chciwy Wyrażenie regularne w Javie
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));
}
}
}
I mieć następną wyjście:
word
w
Ale moim zdaniem to musi być:
word
word
Somebody proszę wyjaśnij mi, dlaczego tak jest?
A teraz druga grupa przechwytuje za dużo, zamiast za mało. Brak łakomstwa nie stanowi problemu, a chciwość nie jest rozwiązaniem. –
Masz rację, ale IMHO, nie-zachłanność drugiej grupy przechwytującej, wyjaśnia, dlaczego przechwytuje ona po prostu "w". Pierwsza grupa przechwytująca musi uchwycić "słowo" z powodu następującego po nim "słowa". Nie wiem dokładnie, czego szuka, a on zredagował pytanie po tym, jak przesłałem swoją odpowiedź, więc nie mogę podać prawidłowego wyrażenia regularnego. – theglauber