正则表达式二进制字符串包含至少和结束

时间:2013-07-19 05:49:02

标签: java regex

问题涉及为二进制字符串编写正则表达式。

你如何写一个以00结尾的另一个以及它包含至少三个1的?

3 个答案:

答案 0 :(得分:1)

00结束:

^[01]*00$

至少包含三个1 s:

^(?=.*(?:0*1){3})[01]*$

这两种:

^(?=.*(?:0*1){3})[01]*00$

<强>解释

^        # Start of string
(?=      # Assert that the following could be matched here:
 .*      # Any number of characters
 (?:0*1) # followed by any number of 0s and exactly one 1
 {3}     # three times
)        # End of lookahead
[01]*    # Match any number of ones or zeroes
00       # Match two zeroes
$        # at the end of the string

由于字符串可能只包含1和0,因此我们实际上并不需要预测。以下内容也适用(但仅限于这些情况):

^(?:0*1){3}[01]*00$

答案 1 :(得分:0)

替代解决方案使用正则表达式:

private static final BigInteger FOUR = new BigInteger("4");

public boolean binaryStringIsOK(final String input)
{
    final BigInteger b;

    try {
        b = new BigInteger(inputString, 2);
        return b.mod(FOUR).equals(BigInteger.ZERO)
            && b.bitCount() >= 3;
    } catch (NumberException ignored) {
        return false;
    }
}

“以00结尾”条件意味着在基数10中,它是4的倍数;因此整数除以4的余数为0.而.bitCount()函数完成剩下的工作。

“以00结尾”的替代方法是测试该数字是否为逻辑 - 3是否为0:

// THREE = new BigInteger("3")
b.and(THREE).equals(BigInteger.ZERO)

答案 2 :(得分:0)

这是检查正则表达式...

以00

结束
00$

三个1

(10*){3}

完全匹配

^[01]*00$
^0*(10*){3}[01]*$