2014-09-20 432 views
0

我試圖(^.*(?0){2}.*$)趕上0的,但不知道如何捕捉到1的正則表達式來梳理包含至少兩個0和最多一個1的字符串?

所以以下數據:

00 
110 
100 
11110011 
00111101 
00101010 
11000000 
00000001 
10000000 

的那些將返回是100,00000001,10000000

+0

它應該與001和010匹配嗎? 00001怎麼樣? (你說至少,不是最多)。 – 2014-09-20 16:35:35

+2

除了'0'和'1'之外是否還有其他字符? – 2014-09-20 16:36:40

+3

不應該'00'匹配嗎?它至少有兩個0,沒有1,滿足'最多一個1'。 – 2014-09-20 16:39:44

回答

2

如果你的角色只是0 S和1就像在你的榜樣,你可以這樣做:

^(0+10+|100+|0+01)$ 

這裏是demo

-1

它適用於任何數字組合。

^(?=[02-9]*1[02-9]*$)\d*0\d*0\d*$ 

DEMO

1

試試這個正則表達式:

^(?=.*0.*0.*)(?=.*1.*)(?!.*1.*1.*).*$ 

這是一樣的:

^(?=.*0.*0.*)(?=[^1]*1[^1]*$).*$ 

使用前瞻斷言:

  • 至少2 zero
  • 至少1 one
  • 至多1 one

DEMO

0

使用此圖案

^(?=(?:.*0){2})(?=[^1]*1[^1]*$)([01]*)$ 
  • ^錨固在開頭
  • (?=(?:.*0){2})先行用於至少兩個0的
  • (?=[^1]*1[^1]*$)先行只有一個「1」到端
  • ([01]*)捕獲0的任何量和1的,或者如果需要更改爲(\d*)
  • $錨固在端
    Demo
0

使用負升ookahead過濾出兩個1或零或一個0的行:

^(?!.*1.*1|[^0]*(0[^0]*)?$)