如何构造匹配非空且以偶数个0结尾字符串的正则表达式?
匹配非空且以连续偶数个0结尾的字符串的正则方案
你的原表达式(1* 0* 1*)*(00)+的核心问题是:前面的分组(1*0*1*)*可以匹配到单个0(奇数个),然后后面的(00)+匹配剩余的两个0,最终把总结尾的奇数个0拆成了“奇数+偶数”的组合,导致像000、100100000这类不符合要求的字符串被错误匹配。
正确的正则表达式
^(?:[10]*1)?(00)+$
拆解说明
(?:[10]*1)?:可选部分,用于匹配字符串中最后一个1及其前面的所有字符。[10]*匹配任意数量的0或1,1确保这部分以1结尾;?表示这部分可以不存在(比如全是0的情况)。(00)+:匹配至少一组连续的两个0,确保结尾是连续的偶数个0,同时保证整个字符串非空。
验证示例
- 匹配成功:
10110010000、00、100、1110000 - 匹配失败:
000、100100000、10、1
内容的提问来源于stack exchange,提问作者potroast12
相关产品推荐
相关产品推荐

