Regex 如何限制正则表达式中的字符外观?
我遇到了一个难题,它要求我为二进制数(包含Regex 如何限制正则表达式中的字符外观?,regex,Regex,我遇到了一个难题,它要求我为二进制数(包含0s和1s)创建正则表达式。但是,只有当二进制数最多只包含五个1s时,字符串才应该匹配如何限制正则表达式中的字符外观? 示例: 01101101正确 01111100正确 10110011正确 01111110错误 11111110错误 本质上,它匹配'1's和'0's的任何组合,但只允许包含单个'1'字符的子字符串最多出现五次 在这里尝试一下: 说明: ^匹配字符串的开头 0*匹配零个或多个'0's (?:10*){,5}最多匹配5个'1's,
0
s和1
s)创建正则表达式。但是,只有当二进制数最多只包含五个1
s时,字符串才应该匹配如何限制正则表达式中的字符外观?
示例:
正确01101101
正确01111100
正确10110011
错误01111110
错误11111110
'1'
s和'0'
s的任何组合,但只允许包含单个'1'
字符的子字符串最多出现五次
在这里尝试一下:
说明:
匹配字符串的开头^
匹配零个或多个0*
s'0'
最多匹配5个(?:10*){,5}
s,后跟任意数量的零'1'
匹配字符串的结尾$
字符串的开头^
肯定的前瞻,断言什么在右边(?=
匹配8次0或1,直到字符串结束[01]{8}$
关闭前瞻)
断言什么在右边的负前瞻(?!
模式0次或多次0后跟1(?:0*1){6,}
不会重复6次或多次(因此0到5次是有效的)0*1
关闭反向前瞻)
匹配0或1一次或多次[01]+$
字符串的结尾$
^0*1?0*1?0*1?0*1?0*$
,但我更喜欢@bunji answer。你用什么语言处理这个问题?谢谢你的回答。但是,^0*(10*){0,5}$
也可以使用。所以我想问一下?
和:
的功能是什么??:
组成一个组。从您的描述来看,您似乎不需要捕获任何组,因此我出于习惯将其设置为非捕获,因为在大多数正则表达式引擎中使用捕获组是有困难的。不过你是对的,这两种方法都有效。
^0*(?:10*){,5}$