2013-04-02 31 views
0

首先,很明顯這是作業,我相信我已經做了盡職調查。現在,我不指望解決交給我一個銀盤,只是在正確的方向將是很好的一個簡單的微調,所以讓我開始:正則表達式 - 二進制字符串匹配但不匹配時

的問題是:

字母表{0,1}上的所有字符串,其中 0的每個奇數長度塊之後緊跟着一個1的偶數長度塊,並且每個 0的偶數長度塊緊跟着一個奇數長度 1的塊。

我一直在做的是一塊一塊的工作吧,先從:

僅匹配甚至爲0的,奇1的:^[^0]*((00)+1(11)*)*$

僅匹配奇0的,甚至是1的:^[^0]*(0(00)*(11)+)*$

一起把他們兩個:^[^0]*((00)+1(11)*)*(0(00)*(11)+)*$

我想這個工作開始,但它僅與工作原理:

  • 001000010110001111等
  • 基本上什麼都重要的是,在相同的順序出現,因爲它是如何出現在其中表達說得通。

而不是:

  • 011001等

我一直停留在是搞清楚是怎麼把它上面列出的情況下工作。我試着做一個積極的向前看,但它似乎並沒有工作。

有沒有人有任何指針?

+0

你試過類似'((case 1)|(case 2))+'嗎? – assylias

回答

0

你絕對走在正確的軌道上。

僅匹配甚至爲0的,奇1的:^(00)+1(11)*$

僅匹配奇0的,甚至1的:^0(00)*(11)+$

把他們兩個在一起:^(((00)+1(11)*)|(0(00)*(11)+))+$

只是爲了好玩,這裏有一個較短的失敗輸入1,111,​​......除非您將零計爲偶數。

^((00)*(01)?1(11)*)+$ 
1

他們結合既是^[^0]*((00)+1(11)*)*(0(00)*(11)+)*$只有讓你的一半,因爲它只有當所有的奇數0偶數1塊都是偶數0奇數1塊之前的作品。你想要的是一個匹配零個或多個匹配的正則表達式([^0]*),然後是奇偶和偶奇的混合,有點類似於(odd-even|even-odd)(odd-even|even-odd)...,但對於任何數量(零個或多個)的奇偶或偶數-奇。你怎麼能做到這一點?

相關問題