Menangkap dan mengelompokkan
Grup pengambilan (pattern)
membuat grup yang memiliki properti penangkapan .
Yang terkait yang mungkin sering Anda lihat (dan gunakan) adalah (?:pattern)
, yang membuat grup tanpa properti capture , oleh karena itu dinamai non-capturing group .
Grup biasanya digunakan ketika Anda perlu mengulangi urutan pola, misalnya (\.\w+)+
, atau untuk menentukan di mana pergantian harus diterapkan, misalnya ^(0*1|1*0)$
( ^
, kemudian 0*1
atau 1*0
, kemudian $
) versus ^0*1|1*0$
( ^0*1
atau 1*0$
).
Grup penangkap, selain pengelompokan, juga akan merekam teks yang cocok dengan pola di dalam grup penangkap (pattern)
. Menggunakan contoh Anda (.*):
, .*
pertandingan ABC
dan :
pertandingan :
, dan karena .*
berada di dalam grup penangkap (.*)
, teks ABC
direkam untuk grup penangkap 1.
Nomor grup
Seluruh pola didefinisikan sebagai nomor kelompok 0.
Grup penangkap dalam pola mulai mengindeks dari 1. Indeks ditentukan oleh urutan kurung buka dari grup penangkap . Sebagai contoh, di sini adalah semua 5 kelompok menangkap di bawah pola:
(group)(?:non-capturing-group)(g(?:ro|u)p( (nested)inside)(another)group)(?=assertion)
| | | | | | || | |
1-----1 | | 4------4 |5-------5 |
| 3---------------3 |
2-----------------------------------------2
Nomor grup digunakan dalam referensi kembali \n
dalam pola dan $n
dalam string pengganti.
Dalam ragam regex lainnya (PCRE, Perl), mereka juga dapat digunakan dalam panggilan sub-rutin .
Anda dapat mengakses teks yang cocok dengan kelompok tertentu Matcher.group(int group)
. Nomor kelompok dapat diidentifikasi dengan aturan yang disebutkan di atas.
Dalam beberapa jenis regex (PCRE, Perl), terdapat fitur reset cabang yang memungkinkan Anda menggunakan nomor yang sama untuk menangkap grup di cabang pergantian yang berbeda .
Nama grup
Dari Java 7, Anda dapat menentukan grup penangkap bernama (?<name>pattern)
, dan Anda dapat mengakses konten yang cocok dengannya Matcher.group(String name)
. Regex lebih panjang, tetapi kodenya lebih bermakna, karena menunjukkan apa yang Anda coba cocokkan atau ekstrak dengan regex.
Nama grup digunakan dalam referensi-belakang \k<name>
dalam pola dan ${name}
dalam string pengganti.
Grup penangkap bernama masih diberi nomor dengan skema penomoran yang sama, sehingga mereka juga dapat diakses melalui Matcher.group(int group)
.
Secara internal, implementasi Java hanya memetakan dari nama ke nomor grup. Oleh karena itu, Anda tidak dapat menggunakan nama yang sama untuk 2 grup pengambilan yang berbeda.