2011-10-20 81 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

相关问题