簡體   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