我遇到了一个问题,它挑战我为二进制数创建正则表达式(包含0
和1
s)。但是,如果二进制数仅包含最多五个1
s,则字符串应该匹配。 如何限制正则表达式中的字符外观?
示例:
01101101
是正确的01111100
是正确的10110011
是正确的01111110
错了11111110
错了答案 0 :(得分:7)
^0*(?:10*){,5}$
基本上,这匹配'1'
和'0'
的任意组合,但只允许包含单个'1'
字符的子字符串最多出现五次。
在这里试试: https://regex101.com/r/JKV1Uk/2
<强>解释强>
^
匹配字符串的开头
0*
匹配零个或多个'0'
s
(?:10*){,5}
最多匹配5个'1'
s,后跟任意数量的零
$
匹配字符串的结尾
答案 1 :(得分:0)
如果您的引擎支持lookaheads,并且1或0不能超过8次且1不应超过5次,则可以使用:
^(?=[01]{8}$)(?!(?:0*1){6,})[01]+$
<强>解释强>
^
字符串的开头(?=
积极向前看,断言右边是什么
[01]{8}$
匹配8次0或1,直到字符串结尾)
关闭前瞻(?!
负面的先行,断言右边是什么
(?:0*1){6,}
模式为0或0后跟1 0*1
的模式不会重复6次或更多次(因此0到5次有效))
关闭否定前瞻[01]+$
匹配0或1次或多次$
字符串的结尾