SORU
13 Mayıs 2013, PAZARTESİ


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**

  1. 0 1 Bu ne anlama geliyor? Eğer herkes iyi örnekler ile bana açıklayabilir olursa daha iyi olur.

  2. Normal ifade deseni olan atlar yani : bir, içerir? Grup 1 algılar parantez içinde tüm kelimeler?

  3. Orada olacak gruplar?, \\s*(\d*)(.*) gibi iki parantez koydum Yani, eğer: group(1) (\d*) bölümü dönecektir ve group(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
16 Mayıs 2013, PERŞEMBE


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Amir Parmar

    Amir Parmar

    25 Kasım 2010
  • kourtneyannmakeup

    kourtneyannm

    19 ŞUBAT 2012
  • Microsoft Research

    Microsoft Re

    24 EKİM 2008