AKTUALIZACJA: Dzięki za wszystkie świetne odpowiedzi! Próbowałem wielu różnych wzorów regex, ale nie rozumiałem, dlaczego m.matches() nie robi tego, co moim zdaniem powinno być. Kiedy przełączyłem się na m.find(), a także dostosowując wzór regex, udało mi się gdzieś dostać.Grupa wzorów/Matchera() w celu uzyskania podciągu w języku Java?
Chciałbym pasuje do wzorca w łańcuchu Java, a następnie wyodrębnić część dopasowaną za pomocą regex (jak $ & operatora Perl).
To jest mój łańcuch źródłowy "s": DTSTART;TZID=America/Mexico_City:20121125T153000
Chcę wyodrębnić część "America/Mexico_City".
Pomyślałem, że mogę użyć Pattern i Matcher, a następnie wyodrębnić używając m.group(), ale to nie działa tak, jak się spodziewałem. Próbowałem małpować z różnymi ciągami regex i jedyną rzeczą, która wydaje się trafiać na m.matches() jest ".*TZID.*"
, co jest bezcelowe, ponieważ po prostu zwraca cały ciąg. Czy ktoś mógłby mnie oświecić?
Pattern p = Pattern.compile ("TZID*:"); // <- change to "TZID=([^:]*):"
Matcher m = p.matcher (s);
if (m.matches()) // <- change to m.find()
Log.d (TAG, "looking at " + m.group()); // <- change to m.group(1)
Wygląda na linii z pliku iCS (iCal) - dlaczego nie używacie http://ical4j.sourceforge.net/ lub odpowiednik? – jrtc27
Rzeczywiście. Zacząłem od ical4j, ale zostało ono rzucone z błędem podczas analizowania pliku ics, więc porzuciłem go. Mogę spróbować ponownie, jeśli potrzebuję więcej funkcji niż tylko wyodrębnianie linii DTSTART. – wufoo