2013-08-04 16 views
6

Nasıl yapılacağını bilmediğim bir normal soru var. Başlangıçta herhangi bir sayıdan oluşan tüm dizeleri eşleştirmeli ve a'nın sayısı tek ise tek bir 1 ise tek bir 0 olduğunda tek bir 0 olmalıdır.Regex Tek/Çift Tutar

Nasıl/garip olanı nasıl takip edersiniz?

Numune

  • aaa1
  • aaaa0
+2

Hiçbir şey denediniz mi? –

+0

Bazı örnek dizeleri yapıştırın. –

cevap

10

^(a(aa)*1|(aa)+0)$

veya

01 Yakalamaları kullanıyorsanız,

^(?:a(?:aa)*1|(?:aa)+0)$.

İlk bölüm: a(aa)*1, a'nın takip eden tek sayısı ile eşleşir ve ikinci kısım: (aa)+0, bir çiftin a sayısı ve ardından sıfır ile eşleşir.

Düzenli ifadelerde desen bileşeninin eşleşme sayısını takip edemezsiniz. Hafızası yok. Neyse ki, bu durumda bu sınırlamayı aşabilirsiniz.

+0

Cevabınız için teşekkürler, açıklayabilir misiniz?: Bunu biliyor muyum? 0 veya 1 anlamına gelir ama birlikte ne demek? –

+0

(?: Pattern), yalnızca Java'daki yakalama eşdeğeri olmayan (desen) eşdeğerdir. Eşleştiricideki grupları kontrol etmiyorsanız, her iki model de eşdeğerdir. Bu bağlamda, 0 veya 1 anlamına gelmez. Http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html –

7

Sen kullanabilirsiniz:

^(?:aa)*(?:a1|0)$