如何限制正则表达式中的字符外观?

时间:2018-03-25 00:18:21

标签: regex

我遇到了一个问题,它挑战我为二进制数创建正则表达式(包含01 s)。但是,如果二进制数仅包含最多五个1 s,则字符串应该匹配。 如何限制正则表达式中的字符外观?

示例:

  • 01101101是正确的
  • 01111100是正确的
  • 10110011是正确的
  • 01111110错了
  • 11111110错了

2 个答案:

答案 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次或多次
  • $字符串的结尾