Przechwytywanie i grupowanie
Grupa przechwytywania (pattern) tworzy grupę, która ma właściwość przechwytywania .
Powiązany, który często można zobaczyć (i używać), to (?:pattern), który tworzy grupę bez właściwości przechwytywania , stąd nazywana grupą nieprzechwytywaną .
Grupa jest zwykle używana, gdy trzeba powtórzyć sekwencję wzorców, np. (\.\w+)+Lub określić, gdzie zmiana powinna obowiązywać, np. ^(0*1|1*0)$( ^, Then 0*1lub 1*0, then $) versus ^0*1|1*0$( ^0*1lub 1*0$).
Grupa przechwytywania, oprócz grupowania, nagra również tekst dopasowany do wzorca wewnątrz grupy przechwytywania (pattern). Korzystanie z przykładem, (.*):, .*tenis ABCi :tenis :, a ponieważ .*znajduje się wewnątrz grupy przechwytywania (.*), tekst ABCjest zapisywany do grupy przechwytywania 1.
Numer grupy
Cały wzorzec jest zdefiniowany jako grupa o numerze 0.
Dowolna grupa przechwytywania we wzorcu rozpoczyna indeksowanie od 1. Indeksy są definiowane przez kolejność nawiasów otwierających grup przechwytywania . Jako przykład, oto wszystkie 5 grup przechwytywania według poniższego wzoru:
(group)(?:non-capturing-group)(g(?:ro|u)p( (nested)inside)(another)group)(?=assertion)
| | | | | | || | |
1-----1 | | 4------4 |5-------5 |
| 3---------------3 |
2-----------------------------------------2
Numery grup są używane w odwołaniach wstecznych \nwe wzorcu i $nw łańcuchu zastępczym.
W innych odmianach wyrażeń regularnych (PCRE, Perl) można ich również używać w wywołaniach podprogramów .
Możesz uzyskać dostęp do tekstu dopasowanego do określonej grupy za pomocą Matcher.group(int group). Numery grup można zidentyfikować za pomocą powyższej zasady.
W niektórych odmianach wyrażeń regularnych (PCRE, Perl) dostępna jest funkcja resetowania gałęzi, która umożliwia użycie tej samej liczby do przechwytywania grup w różnych gałęziach naprzemienności .
Nazwa grupy
W języku Java 7 można zdefiniować nazwaną grupę przechwytywania (?<name>pattern) i uzyskać dostęp do dopasowanej treści Matcher.group(String name). Wyrażenie regularne jest dłuższe, ale kod jest bardziej znaczący, ponieważ wskazuje, co próbujesz dopasować lub wyodrębnić za pomocą wyrażenia regularnego.
Nazwy grup są używane w odwołaniach wstecznych \k<name>we wzorcu i ${name}w łańcuchu zastępczym.
Nazwane grupy przechwytywania są nadal numerowane za pomocą tego samego schematu numerowania, więc można do nich również uzyskać dostęp za pośrednictwem Matcher.group(int group).
Wewnętrznie implementacja Javy po prostu odwzorowuje nazwę na numer grupy. Dlatego nie możesz użyć tej samej nazwy dla 2 różnych grup przechwytywania.