2016-07-18 68 views
1

問:鑑於二元字母{0,1},寫的正則表達式承認,至少有兩個連續的「1的所有單詞 ,例如0100110011100010011001正則表達式修訂

我的上述問題的回答是:0*{ (0|1)* 11+ }*

+3

['[01] * 11 [01] *'](https://regex101.com/r/fF0gK0/1)? –

+0

如果這個問題是關於自動機理論中的正則表達式的話,那麼這個網站是http:// cs。stackexchange.com/ –

回答

4

您可以使用一個簡單的語句,比如

[01]*11[01]* 

regex demo

說明

  • [01]* - 零個或多個零或一
  • 11 - 連續兩個1小號
  • [01]* - 零個或多個零或一
1

如果字母是給定的,這樣你就不必考慮對於任何不屬於該語言的符號,並且您一次匹配單詞,這樣您就不必擔心單詞的開始和結束,這很容易。

.*?11 

我們不情願地將所有東西都匹配起來,直到找到兩個連續的1。然後,我們知道我們配套的字是一個我們感興趣的。


然而,給我的感覺,這不回答你的問題。有些東西告訴我你正在使用一種非常有限的味道,不允許勉強(儘可能少地與*?匹配),也不要濫交(與.匹配「whatever」)。

所以相反,想想你的正則表達式有兩種可能的狀態。首先是未滿足的狀態,我們沒有匹配兩個連續的1,第二個是滿意的狀態,我們的

  1. 只要我們匹配0或1然後是0,我們仍然處於不滿意的狀態。這是(0|10)*
  2. 然後我們連續兩次匹配並達到滿意狀態。這是11
  3. 之後,我們可以匹配0和1,並保持滿意狀態。這是(0|1)*。如果你有品味的人物,你可以使用這些,如[01]*

全部放在一起,我們得到

(0|10)*11(0|1)* 

可以在動作上可見Regex 101