2013-08-04 29 views
6

我有一個正則表達式問題,我不知道該怎麼做。 它必須匹配包含任意數量的a的所有字符串,然後如果a的數目是偶數,則可以是單個0,如果a的數目是奇數,則可以是單個1。正則表達式奇/偶數量

如何跟蹤偶數?

樣品

  • AAA1
  • aaaa0
+2

你嘗試過什麼嗎? –

+0

粘貼一些示例字符串。 –

回答

10

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

^(?:a(?:aa)*1|(?:aa)+0)$如果您使用捕獲。

第一部分:a(aa)*1將匹配a的任意奇數,後面跟一個,第二部分:(aa)+0將匹配任何偶數個a,後跟零。

您無法跟蹤正則表達式中模式組件的匹配數量。他們沒有記憶。幸運的是,在這種情況下你可以繞過這個限制。

+0

謝謝你的回答,你能解釋一下嗎?:,我知道嗎?意味着0或1,但它們是什麼意思呢? –

+0

(?:pattern)只是Java中(模式)的非捕獲等價物。如果您沒有在匹配器中檢查組,那麼這兩種模式都是相同的。在這種情況下,它並不意味着0或1. http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html –

7

你可以使用:

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