2015-01-08 13 views
6

Chciałbym użyćandroid java regex nazwane grupy

matcher.group("login"); 

w Android 8+ na Eclipse, ale nie Matcher.group (String) wydaje się istnieć. Masz rozwiązanie (wbudowane)?

+0

Matcher nie działa w ten sposób. Pokaż nam, co chcesz uzyskać z którego ciągu – TheLostMind

+0

Chciałbym tej formy wyrażeń regularnych: (? X) – hanoo

+0

Wyrecytowanie pochodzi z pliku konfiguracyjnego, dlatego potrzebuję nazwanych grup – hanoo

Odpowiedz

8

Android Pattern implementacja klas jest zapewniona przez ICU, a dokładniej: ICU4C.

Implementacja wyrażeń regularnych stosowana w systemie Android jest zapewniana przez ICU. Notacja dla wyrażeń regularnych jest przeważnie nadzbiorem tych używanych w innych implementacjach języka Java. Oznacza to, że istniejące aplikacje działają normalnie zgodnie z oczekiwaniami, ale w rzadkich przypadkach Android może zaakceptować wyrażenie regularne, które nie jest akceptowane przez inne implementacje.

Obecnie ICU4C nie obsługuje nazwanej grupy przechwytującej. Musisz wrócić do ponumerowanych grup przechwytujących.

ICU nie obsługuje nazwanych grup przechwytywania. http://bugs.icu-project.org/trac/ticket/5312

Musisz napisać opakowanie i samemu przeanalizować wyrażenie, aby podać nazwę grupy przechwytywania, jeśli naprawdę potrzebujesz tej funkcji.

2

Pomyślałem, że powinienem znaleźć rozwiązanie, które znalazłem. Na Githubie dostępna jest fantastyczna biblioteka napisana przez Tony'ego Trinha (tony19), która umożliwia korzystanie z nazwanych grup regex.

Zrobione ze strony projektu:

„Ta lekka biblioteka dodaje wsparcie dla wymienionych grup przechwytujących w Javie 5/6 (i na Android)

To widelec projektu o nazwie-regexp od. Kod Google (obecnie nieaktywny). "

https://github.com/tony19/named-regexp

Właśnie to przetestowane na Androidzie 4.1.1 i wyżej, i tak daleko, że wszystko działa jak czar. Byłem mile zaskoczony tym, że mogłem po prostu zastąpić mój import Matchera i Patterna klasami z tej biblioteki, a wszystkie moje istniejące wyrażenia, które wciąż używały ponumerowanych grup, nadal działały.

Mam nadzieję, że to pomoże.