我有一个位序列,也可以从0开始。我想写一个只匹配序列的正则表达式,它包含00 <=一次和11 <=一次。
我的尝试是^([01](?!(?:[^(00|11)]*(00|11){2})))*$
,我尝试了regex101.com。遗憾的是,这实际上并不起作用。
例如,它与010000
(正确)不匹配,但与01000100
匹配,显然不应该被检测到。
答案 0 :(得分:2)
在您的模式中,该部分[^(00|11)]
使用否定的字符类,该字符类将与所列字符以外的任何字符匹配,并且可以写为[^01|)(]
一种选择是使用2个负前瞻性断言00和11的出现不超过2次,用1个正前瞻性断言存在11个。
^(?!(?:[01]*11){2})(?!(?:[01]*00){2})(?=[01]*11)[01]*00[01]*$
说明
^
字符串的开头(?!(?:[01]*11){2})
负向前进,断言右边不是2乘以11 (?!(?:[01]*00){2})
负向前进,断言右边的值不是00的2倍。(?=[01]*11)
前瞻,断言11 [01]*00[01]*
匹配0+次0或1,然后匹配00,然后是0+次0或1 $
字符串结尾答案 1 :(得分:0)
您可以将其视为密码验证
access_token: 'xxxxx'
scope: ''
token_type: 'bearer'
https://regex101.com/r/nIDjNq/1
解释
^(?!.*00.*00)(?!.*11.*11)(?=.*00)(?=.*11)[01]+$
基准 fwow
^ # BOS
(?! .* 00 .* 00 ) # Not 2 of '00'
(?! .* 11 .* 11 ) # Not 2 of '11'
(?= .* 00 ) # Has a '00'
(?= .* 11 ) # Has a '11'
[01]+ # Match multiple 0 or 1
$ # EOS