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

Regex to match binary numbers with more than two set bits

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

一些示例:

1000000010001
0001100000000
1000110010000
0000001000000
0100010000000

我需要我的表达式才能正确匹配第一个和第三个示例。

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

1.+1.+(1)

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

您可以简单地使用:

.*1.*1.*1.*

regex101 doodle

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

如果您不使用开始锚点 (^) 和结束锚点 $,则不需要第一个和最后一个 .*。否则这些是:^.*1.*1.*1.*$.

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

10*10*1

匹配grep的片段或行。或者匹配整行:

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

您可以使用以下内容:

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

相当于:

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

DEMO

你做的很好。我稍微更改了它以匹配完整的数字并适应所有可能的情况:

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

查看示例 here

当然,这是假设您只有二进制数。如果不是,请随意将 0 更改为 [02-9] 以包括所有其他数字。

细分

(?:0*1) 匹配任意数量的 0,然后匹配一个 1{3,}表示至少要找到这个组3次,也就是说至少要有3次,也就是2次以上,1。然后我们匹配任意数量的 0 以防数字不以 1 结尾并将整个数字包含在匹配中。