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

Pattern.matcher()匹配异常:如何编写匹配首尾为1中间仅含0的正则?

匹配首尾为1、中间仅含0的子串的解决方法

正确的正则与代码实现

要拿到所有符合要求(首尾是1,中间只有0,也可以没有0)的子串,包括重叠的情况,得用正向预查来做——它不会消耗字符串里的字符,能让我们遍历到每个可能的起始位置:

Pattern p = Pattern.compile("(?=(10*1))");
Matcher m = p.matcher(binaryString);
while(m.find()){
    System.out.println(m.group(1)); 
}

拿输入1101测试,会输出:

11
101

原代码失效的原因

你写的(10*1)正则本身的规则是对的,但Java的匹配机制导致它抓不全结果:

  • 匹配会消耗字符,漏过重叠子串
    Matcher.find()每次找到匹配后,会从匹配结束的位置继续往下找。比如输入1101,第一次抓到11(索引0到1)后,指针直接跳到索引2,剩下的01不符合开头是1的要求,自然抓不到后面的101。
  • 无法覆盖重叠场景
    你要的101和11是重叠的(共享中间的那个1),原代码的匹配方式会“用掉”前面的字符,根本没机会检查到这种重叠的情况。

内容的提问来源于stack exchange,提问作者Hua Liang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 21:52:56