Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何限制正则表达式中的字符外观?_Regex - Fatal编程技术网

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*
    匹配零个或多个
    '0'
    s

  • (?:10*){,5}
    最多匹配5个
    '1'
    s,后跟任意数量的零

  • $
    匹配字符串的结尾

如果您的发动机支持,且1或0出现的次数不能超过8次,且1出现的次数不应超过5次,则您可以使用:

解释

  • ^
    字符串的开头
  • (?=
    肯定的前瞻,断言什么在右边
    • [01]{8}$
      匹配8次0或1,直到字符串结束
  • 关闭前瞻
  • (?!
    断言什么在右边的负前瞻
    • (?:0*1){6,}
      模式0次或多次0后跟1
      0*1
      不会重复6次或多次(因此0到5次是有效的)
  • 关闭反向前瞻
  • [01]+$
    匹配0或1一次或多次
  • $
    字符串的结尾

你错过了关于错误示例的部分Hanks,这是我对问题的解决方案,
^0*1?0*1?0*1?0*1?0*$
,但我更喜欢@bunji answer。你用什么语言处理这个问题?谢谢你的回答。但是,
^0*(10*){0,5}$
也可以使用。所以我想问一下
的功能是什么?
?:
组成一个组。从您的描述来看,您似乎不需要捕获任何组,因此我出于习惯将其设置为非捕获,因为在大多数正则表达式引擎中使用捕获组是有困难的。不过你是对的,这两种方法都有效。
^0*(?:10*){,5}$