2016-07-18 76 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