2011-10-20 127 views

回答

2

嘗試這個表達式:

^(.*0.*0.*1.*)|(.*0.*1.*0.*)|(.*1.*0.*0.*)$ 

EDIT 可以簡化爲:

^.*(0.*0.*1)|(0.*1.*0)|(1.*0.*0).*$ 
+1

爲什麼使用'^'和'$'?嘗試'(0. * 0. * 1)|(0. * 1. * 0)|(1. * 0. * 0)' –

+2

如果您想驗證一串'1'和'0符合問題的條件,那麼搜索'001 | 01 + 0 | 100'就足夠了。 – Qtax

0

的建議的解決方案是錯誤的,因爲它也會接受000000000其中E = {0,1}。請注意,1 *表示任意數量的1 [包括無]

E* * (0E*0E*1+0E*1E*0+1E*0E*0) * E*將工作:所有可能的排列0,0,1,並在任何可能的地方插入E * [因此,您可以在/之間插入任意數量的字符所需元素]。在正則表達式的語法是:.*(0.*0.*1|0.*1.*0|1.*0.*0).*

1

如果你被允許使用前瞻,這裏是我會怎麼做:(與評論在PHP中的自由空間模式)

$re = '/ 
    # Binary strings that include at least two 0s and at least one 1. 
    ^    # Anchor to start of string. 
    (?=(?:[^0]*0){2}) # at least two 0s. 
    (?=[^1]*1)   # at least one 1. 
    [+\-]?    # Optional leading sign. 
    [01]+    # Match string of binary digits. 
    $     # Anchor to end of string. 
    /x'; 

請注意您可能在字符串的開頭放置任意數量的預覽(以邏輯AND的方式工作),以指定多個邏輯要求。

-3

(* 00 + 1+。)|(*。1+ * 00 + *)

上面是自我說明

。是任何字符 +是一個或多個

+1

這是錯誤的,因爲例如「100」將被拒絕 – amit

相關問題