JavaRush /Blog Java /Random-PL /Linki zwrotne w wyrażeniach regularnych Java
eGarmin
Poziom 41

Linki zwrotne w wyrażeniach regularnych Java

Opublikowano w grupie Random-PL
Odwołania zwrotne w wyrażeniach regularnych Java są bardzo przydatną funkcją obsługiwaną przez silnik Java . Aby zrozumieć, czym są linki zwrotne, musisz najpierw dowiedzieć się, czym jest grupa . Grupa w wyrażeniach regularnych traktuje wiele znaków jako pojedynczą jednostkę. Grupy tworzy się poprzez umieszczenie znaków w nawiasach – „()”. Jedna para nawiasów to jedna grupa. Linki zwrotne są wygodne, ponieważ możemy powtarzać wzorce wyszukiwania bez ich bezpośredniego kopiowania. Wystarczy, że odniesiemy się do wcześniej zdefiniowanej grupy, używając konstrukcji takiej jak \N , gdzie N jest numerem grupy. Poniższe 2 przykłady pozwolą Ci poczuć wygodę korzystania z linków zwrotnych.
Przykład 1: Znajdowanie powtarzającego się wzorca
Konstrukcja formularza (\d\d\d)\1 pasuje do linii 123123, ale nie do linii 123456. String str = "ля123123ля"; Pattern p = Pattern.compile("(\\d\\d\\d)\\1"); Matcher m = p.matcher(str); System.out.println(m.groupCount()); while (m.find()) { String word = m.group(); System.out.println(word + " " + m.start() + " " + m.end()); } Wynik: 1 123123 2 8 Uwaga tłumacza! Tutaj jako tłumacz chcę pozwolić sobie na odrobinę swobody i wstawić uwagi od siebie, bo Sam dopiero uczę się wyrażeń regularnych i mam nadzieję, że poprawią mnie przekleństwami :) jeśli to co napiszę poniżej jest błędem: 1) Metoda groupCount( ) Zwraca liczbę grup określoną we wzorcu, więc nawet jeśli wprowadzonym ciągiem znaków będzie „la123” 456 la”, który nie mieści się w szablonie, na ekranie nadal będzie wyświetlana liczba 1. 2) Metoda find() Wyszukuje następną grupę, ale zwraca tylko wartość logiczną : prawda – znaleziono, fałsz – nie znaleziono 3) Metoda group() Zwraca ostatni znaleziony podciąg ze wzorca. W tym przypadku 123123 4) Metoda start() Zwraca pozycję znalezionego podciągu w ciągu źródłowym (numerowanie oczywiście zaczynając od zera) 5) Metoda end() Zwraca pozycję w ciągu źródłowym bezpośrednio po znalezionym ciągu podciąg. Zatem wartość ta nie wskazuje na ostatni znak znalezionego podciągu w ciągu źródłowym, ale na następny po nim.
Przykład 2: Znajdowanie duplikatów słów
String pattern = "\\b(\\w+)\\b[\\w\\W]*\\b\\1\\b"; Pattern p = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE); String phrase = "unique is not duplicate but unique, Duplicate is duplicate."; Matcher m = p.matcher(phrase); while (m.find()) { String val = m.group(); System.out.println("Найденная последовательность символов: \"" + val + "\""); System.out.println("Слово-дубликат: " + m.group(1) + "\n"); } Wniosek: Найденная последовательность символов: "unique is not duplicate but unique" Слово-дубликат: unique Найденная последовательность символов: "Duplicate is duplicate" Слово-дубликат: Duplicate Należy pamiętać, że ta metoda wyszukiwania duplikatów słów (za pomocą wyrażeń regularnych) nie jest optymalna. Na przykład w powyższym przykładzie pominięto pierwsze słowo „duplikat”.
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION