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*1
veya 1*0
sonra $
) ve ^0*1|1*0$
( ^0*1
veya 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 ABC
ve :
eşleşmeler :
ve .*
yakalama grubunun içinde olduğu için, (.*)
metin ABC
yakalama 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ı, \n
modelde geri referans ve $n
değ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.