You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:匹配无连续相同位二进制数的正则表达式修正

解决无连续相同位二进制数的正则匹配问题

你的原正则表达式(01*01)*存在两个核心问题,导致合法字符串也无法匹配:

  1. 强制以0开头,完全无法匹配以1开头的合法交替二进制数(比如你的测试用例"10101010");
  2. 1*允许连续的1,这直接违反了"无连续相同位"的规则,同时还漏掉了单个0/1、奇数长度的合法字符串等场景。

正确的正则表达式

使用以下正则可以准确匹配所有无连续相同位的二进制数:

^(01|10)*[01]?$

如果不需要匹配空字符串,可使用更严谨的版本:

^(01|10)*[01]$|^(01|10)+$

正则说明:

  • ^ 和 $:锁定字符串的开头和结尾,确保整个字符串都符合规则,避免部分匹配;
  • (01|10)*:匹配任意次数的"01"或"10"交替组合,覆盖偶数长度的合法字符串(如"01"、"1010");
  • [01]?:允许字符串以单个0或1结尾,覆盖奇数长度的合法字符串(如"0"、"101"),?表示该部分可选。

修改后的Java代码

public static boolean isBin2(String bin2) {
    Pattern regexBinary2 = Pattern.compile("^(01|10)*[01]?$");
    Matcher matcher = regexBinary2.matcher(bin2);
    return matcher.matches();
}

测试验证

  • "10101010" → 返回true(符合要求)
  • "10010101" → 返回false(存在连续的0,不符合要求)
  • 边界测试:"0"、"1"、"01"、"101"均返回true;"00"、"111"、"0110"均返回false

内容的提问来源于stack exchange,提问作者haruka kudo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 23:05:31