0

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

您如何编写一个以 00 结尾的代码,以及另一个包含至少三个 1 的代码?

4

3 回答 3

1

结尾00

^[01]*00$

至少包含三个1

^(?=.*(?: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$
于 2013-07-19T05:51:34.617 回答
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)
于 2013-07-19T06:00:55.887 回答
0

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

以 00 结尾

00$

三个 1

(10*){3}

对于全场比赛

^[01]*00$
^0*(10*){3}[01]*$
于 2013-12-25T00:06:45.360 回答