问题涉及为二进制字符串编写正则表达式。
你如何写一个以00结尾的另一个以及它包含至少三个1的?
答案 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]*$