繁体   English   中英

至少有一个 1 和偶数个 0 的二进制字符串的正则表达式

[英]Regex of binary strings that have at least one 1 and an even number of 0

我想找到一个至少有一个 1 和偶数个 0 的正则表达式二进制字符串表达式。

对于偶数为 0 的字符串,我有:

1*(01*01*)*

对于至少有一个 1 的字符串,我有:

0*1(0+1)*

但是,我很难将两者结合在一起。 谁能给我一个关于如何做的提示? 谢谢!

没有任何花哨的正则表达式,只需^ start、 $ end锚点| pipe ,怎么样

^(00)*(1|01+0)(1*01*0)*1*$

应该是不言自明的。 在 regex101 使用它 希望我没有忽略任何事情:)

如果允许环视,我也可以考虑一个负面的: ^(??0*$)(::1*01*0)*1*$

匹配偶数个零和至少一个 1 的一个选项可能是使用正向前瞻(?= (如果支持)

^(?=(?:1*01*01*)+$)0*1[10]*$
  • ^字符串开头
  • (?=正向前瞻,断言右边是
    • (?:1*01*01*)+$重复 1+ 次,匹配两次零和可选的
  • )关闭前瞻
  • 0*1匹配零次或多次零,然后匹配所需的一次
  • [10]*匹配 0+ 次零或一
  • $字符串结尾

正则表达式演示


要也只匹配一个(所以没有零),你可以使用

^(?=(?:(?:1*01*01*)+|1+)$)0*1[10]*$

正则表达式演示

我不确定我是否正确理解了您的要求,但是如果+应该代表交替(通常是| ),并且只允许*+和括号(正如您在下面的评论所示),那么

(1*01*01*)*(11*+011*0)(1*01*01*)*

应该管用。

这个想法是必须存在一个1 ,使得它的左右必须是相等数量的0 s,或者它的左右必须是奇数的0 s: (11*+011*0)

您的0*1(0+1)*也将匹配01所以我相信它不起作用。

在这种组的左右任何一种情况下,都可以存在相等数量的0 s,其间可以存在任意数量的1 s: (1*01*01*)*

在大多数正则表达式实现中,上述正则表达式将写为

^(1*01*01*)*(11*|011*0)(1*01*01*)*$

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM