Yakalama ve gruplama
Grup yakalama (pattern) Bir yaratır grubu vardır yakalama özelliği.
Sık sık (bkz ve kullanım) diye İlgili bir tanesidir (?:pattern)bir oluşturur, grup olmadan yakalama özelliği dolayısıyla adlı dışı yakalayan grup .
Bir grup genellikle bir kalıp dizisini tekrarlamanız gerektiğinde kullanılır, örneğin (\.\w+)+, veya değişimin nerede etkili olacağını belirtmek için, örneğin ^(0*1|1*0)$( ^sonra 0*1veya 1*0sonra $) ve ^0*1|1*0$( ^0*1veya 1*0$).
Gruplama dışında bir yakalama grubu, yakalama grubu içindeki modelle eşleşen metni de kaydedecektir (pattern). Örneğinizi kullanarak (.*):, .*eşleşmeler ABCve :eşleşmeler :ve .*yakalama grubunun içinde olduğu için, (.*)metin ABCyakalama grubu 1 için kaydedilir.
Grup numarası
Tüm model, grup numarası 0 olarak tanımlanmıştır .
Modeldeki herhangi bir yakalama grubu, indekslemeye 1'den başlar. Endeksler , yakalama gruplarının açılış parantezlerinin sırasına göre tanımlanır . Örnek olarak, aşağıdaki düzende bulunan 5 yakalama grubunun tümü :
(group)(?:non-capturing-group)(g(?:ro|u)p( (nested)inside)(another)group)(?=assertion)
| | | | | | || | |
1-----1 | | 4------4 |5-------5 |
| 3---------------3 |
2-----------------------------------------2
Grup numaraları, \nmodelde geri referans ve $ndeğiştirme dizesinde kullanılır.
Diğer normal ifade çeşitlerinde (PCRE, Perl), alt rutin çağrılarda da kullanılabilirler .
İle belirli grupların eşleştiği metne erişebilirsiniz Matcher.group(int group). Grup numaraları yukarıda belirtilen kuralla tanımlanabilir.
Bazı regex tatlar (PCRE, Perl) olarak, bir orada şube sıfırlama kullanmak için izin verir özellik aynı numarayı için arda gelişinde farklı dallarında grupları yakalamak .
Grup ismi
Java 7'den adlandırılmış bir yakalama grubu tanımlayabilir (?<name>pattern)ve eşleşen içeriğe erişebilirsiniz Matcher.group(String name). Normal ifade daha uzundur, ancak normal ifadeyle neyi eşleştirmeye veya çıkarmaya çalıştığınızı gösterdiği için kod daha anlamlıdır.
Grup isimleri, \k<name>modelde geri referans ve ${name}değiştirme dizgesinde kullanılır.
Adlandırılmış yakalama grupları hala aynı numaralandırma şeması ile numaralandırılmıştır, bu nedenle bunlara da erişim sağlanabilir Matcher.group(int group).
Dahili olarak, Java'nın uygulaması sadece isimden grup numarasına eşlenir. Bu nedenle, 2 farklı yakalama grubu için aynı adı kullanamazsınız.