正则表达式匹配二进制数与两个以上的设置位

时间:2015-05-30 19:37:52

标签: regex binary

如果我有一个仅由1和0组成的数字,我需要创建一个正则表达式,只有当所述数字包含两个以上数字1的实例时才会匹配。

一些例子:

1000000010001
0001100000000
1000110010000
0000001000000
0100010000000

我需要我的表达才能正确匹配第1和第3个例子。

我猜这应该是一些基本的东西。我管理的最好的是:

1.+1.+(1)

但它给了我一些问题,所以我想知道是否有更好的方法来解决这个问题。

3 个答案:

答案 0 :(得分:2)

您可以简单地使用:

.*1.*1.*1.*

regex101 doodle

所以三个1之间有.*。 Kleene星表示零次或多次重复,而.+表示一次或更多次重复。

如果您不使用start(.*)和end anchors ^,则不需要第一个和最后一个$。否则这些是:^.*1.*1.*1.*$

或者万一 - 正如@Kasra所说 - 不能保证字符串只包含1和0,你可以使用正则表达式:

10*10*1

将片段或行与grep匹配。或者匹配整行:

^[0-1]*10*10*1[0-1]*$

答案 1 :(得分:2)

您可以使用以下内容:

^0*10*10*1[10]*$

相当于:

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

请参阅DEMO

答案 2 :(得分:2)

你做的很不错。我把它改了一点以匹配完整的数字并容纳所有可能的情况:

((?:0*1){3,}0*)

查看示例here

这当然假设你只有二进制数。如果没有,请随时将0更改为[02-9]以包含所有其他数字。

击穿

(?:0*1)匹配任意数量的0,然后匹配1{3,}意味着至少要找到这个群体三次,这意味着必须至少有三个,即两个以上1。然后我们匹配任意数量的0以防数字未以1结尾,并在匹配中包含整数。