Java düzenli ifade içinde Eşleştirici grup hakkında karıştı
Aşağıdaki satırı var
typeName="ABC:xxxxx;";
Kelime ABC
, almaya ihtiyacım var
Aşağıdaki kod parçacığı yazdım
Pattern pattern4=Pattern.compile("(.*):");
matcher=pattern4.matcher(typeName);
String nameStr="";
if(matcher.find())
{
nameStr=matcher.group(1);
}
Eğer öyleyse group(0)
koymak ABC:
ama group(1)
koyduğumu bilmek istiyorum yani 9**
0
1
Bu ne anlama geliyor? Eğer herkes iyi örnekler ile bana açıklayabilir olursa daha iyi olur.Normal ifade deseni olan atlar yani
:
bir, içerir? Grup 1 algılar parantez içinde tüm kelimeler?Orada olacak gruplar?,
\\s*(\d*)(.*)
gibi iki parantez koydum Yani, eğer:group(1)
(\d*)
bölümü dönecektir vegroup(2)
(.*)
bölüm dönüş?
Kod parçacığının bir amaç benim karışıklık temizlemek için verildi. Ele alacağım kod değil. Yukarıda verilen kodu çok daha kolay bir şekilde String.split()
ile yapılabilir.
CEVAP
Yakalama ve gruplandırma
Grup yakalama(pattern)
oluştururgrupbu vardıryakalamaözellik.
Sık sık görebileceğiniz bir ilgili bir (ve kullanmak) yaratır (?:pattern)
grupolmadanyakalamamülkiyet, bu nedenle adıolmayan yakalayan grup.
Bir grup genellikle kullanılan etmeniz için bir yineleme desenleri, örneğin (\.\w )
veya belirttiğiniz değişim yapmalı etkisi, örneğin ^(0*1|1*0)$
(^
0*1
1*0
$
) karşı ^0*1|1*0$
(^0*1
1*0$
).
Yakalayan bir grup, gruplandırma dışında bir de metin yakalama grubunu içinde desen (pattern)
ile eşleşen bir kayıt olacak. Kullanarak örnek (.*):
, .*
maçlar ABC
:
maçlar :
beri .*
içinde yakalayan grup (.*)
, metin ABC
kaydedilen yakalayan grup 1.
Grup numarası
Bütün desentanımlanmışgrup numarası 0 olmalıdır.
Desen herhangi bir yakalama grubunu 1 dizin oluşturma başlayın. İndis sırasına göre tanımlanıraçılış yakalayan grupların parantez. Örnek olarak, buradatüm5 desen aşağıda grupları yakalamak:
(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ı geri-referans desen \n
yedek dize $n
kullanılır.
Diğer düzenli tatlar (/Perl) da kullanılmış olabiliralt yordamı çağırır.
Metin Matcher.group(int group)
ile belli bir grup tarafından eşleşen erişebilirsiniz. Grup numaraları kuralı yukarıda belirtilen ile tespit edilebilir.
Bazı düzenli tatlar (/Perl), bir yokturşube sıfırlayınseni kullanmak için izin verir özelliğiaynı sayıdaiçindeğişim farklı dallarında gruplar.
Grup adı
Java 7, named capturing group (?<name>pattern)
ve içeriği Matcher.group(String name)
ile eşleşti erişebilirsiniz tanımlayabilir. Normal ifade uzun, ancak kod maç ya da ayıklamak için normal ifade ile çalışıyoruz ne gösterir bu yana daha da anlamlıdır.
Grup isimleri geri-referans desen \k<name>
yedek dize ${name}
kullanılır.
Adında gruplar hala aynı numaralama sayılı, ayrıca Matcher.group(int group)
üzerinden erişilebilir.
DAHİLİ olarak, Java uygulaması grup ismi sayıda haritalar. Bu nedenle, 2 farklı gruplar için aynı adı kullanın.
Arasındaki fark() maçları ve Bul() Jav...
Nasıl Java düzenli ifade için metin ka...
Etkileşimli arama/Vim içinde düzenli i...
Nasıl bir düzenli ifade içinde birden ...
Eşleşen bir düzenli ifade alanı içinde...