W poniższym kodzie:Java regex - nakładających mecze
public static void main(String[] args) {
List<String> allMatches = new ArrayList<String>();
Matcher m = Pattern.compile("\\d+\\D+\\d+").matcher("2abc3abc4abc5");
while (m.find()) {
allMatches.add(m.group());
}
String[] res = allMatches.toArray(new String[0]);
System.out.println(Arrays.toString(res));
}
wynik jest:
[2abc3, 4abc5]
Chciałbym go mieć
[2abc3, 3abc4, 4abc5]
Jak można to osiągnąć?
Należy wyszukiwać rozpoczynając od każdego indeksu; użyj metody find (int startIndex) i rozpocznij wyszukiwanie od każdej pozycji znaku. Oczywiście, prawdopodobnie znajdziesz zbyt wiele dopasowań ... Zakładając, że chcesz zacząć od każdej liczby, możesz spróbować połączyć iterację za pomocą Matcher.find (String.indexOf (cyfry, indeks)) dla wszystkich pasujących indeksów. – user1676075
Przypuszczam, że jeśli są to pojedyncze cyfry, możesz utworzyć kopię zapasową z pozycji początkowej meczu i znaleźć stamtąd na następny mecz. – user1676075
Dla wejścia '" 12abc13abc14abc15 "', czy chcesz '[12abc13, 2abc13, 13abc14, 3abc14, 14abc15, 4abc15]' lub '[12abc13, 13abc14, 14abc15]'? – johnchen902