Diğerlerinin neden bu kadar karmaşık düzenli ifadeler veya bu kadar uzun kodlar önerdiğini anlamıyorum. Esasen, dizenizden iki tür şey almak istiyorsunuz: boşluk veya tırnak olmayan karakter dizileri ve aralarında tırnak işareti olmadan bir alıntıyla başlayan ve biten karakter dizileri, iki tür tırnak için. Bunları şu normal ifadeyle kolayca eşleştirebilirsiniz:
[^\s"']+|"([^"]*)"|'([^']*)'
Alıntıları listede istemediğiniz için yakalama gruplarını ekledim.
Bu Java kodu listeyi oluşturur, eğer eşleşmişse tırnakları hariç tutmak için yakalama grubunu ekler ve yakalama grubu eşleşmezse (alıntılanmamış bir kelime eşleşmişse) genel normal ifade eşleşmesini ekler.
List<String> matchList = new ArrayList<String>();
Pattern regex = Pattern.compile("[^\\s\"']+|\"([^\"]*)\"|'([^']*)'");
Matcher regexMatcher = regex.matcher(subjectString);
while (regexMatcher.find()) {
if (regexMatcher.group(1) != null) {
// Add double-quoted string without the quotes
matchList.add(regexMatcher.group(1));
} else if (regexMatcher.group(2) != null) {
// Add single-quoted string without the quotes
matchList.add(regexMatcher.group(2));
} else {
// Add unquoted word
matchList.add(regexMatcher.group());
}
}
Döndürülen listede alıntıların olması sizin için sorun değilse, çok daha basit bir kod kullanabilirsiniz:
List<String> matchList = new ArrayList<String>();
Pattern regex = Pattern.compile("[^\\s\"']+|\"[^\"]*\"|'[^']*'");
Matcher regexMatcher = regex.matcher(subjectString);
while (regexMatcher.find()) {
matchList.add(regexMatcher.group());
}