正则表达式以匹配具有两个以上设置位的二进制数
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.*
所以三个 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
结尾并将整个数字包含在匹配中。
如果我有一个仅由 1 和 0 组成的数字,我需要创建一个正则表达式,仅当该数字包含两个以上的数字 1 实例时才匹配。
一些示例:
1000000010001
0001100000000
1000110010000
0000001000000
0100010000000
我需要我的表达式才能正确匹配第一个和第三个示例。
我猜这应该是一些基本的东西。我做的最好的是:
1.+1.+(1)
虽然它给我带来了一些问题,所以我想知道是否有更好的方法来解决这个问题。
您可以简单地使用:
.*1.*1.*1.*
所以三个 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
结尾并将整个数字包含在匹配中。