包含至少两个0和至少一个1的所有二进制字符串的正则表达式?

时间:2011-10-20 15:40:39

标签: regex finite-automata

我认为它会是(E0 * 0 * EUE1 * E)? 其中E是我的字母表的集合,至少有2 0和至少1 1

4 个答案:

答案 0 :(得分:2)

试试这个表达式:

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

EDIT 可以简化为:

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

答案 1 :(得分:1)

如果你被允许使用lookahead,我就是这样做的:(在带有注释的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方式工作),以指定多个逻辑要求。

答案 2 :(得分: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).*

答案 3 :(得分:-3)

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

以上是自我解释

。是任何角色 +是一个或多个