正则表达式修订

时间:2016-07-18 11:55:35

标签: regex lexical

问题:给定二进制字母{0,1},编写一个识别所有单词的正则表达式 至少有两个连续的'1',例如0100110011100010011001

我的答案是:0*{ (0|1)* 11+ }*

2 个答案:

答案 0 :(得分:4)

您可以使用像

这样的简单表达式
[01]*11[01]*

请参阅regex demo

<强>解释

  • [01]* - 零个或多个零或一个
  • 11 - 连续两次1 s
  • [01]* - 零个或多个零或一个

答案 1 :(得分:1)

如果字母是给定的,那么您就不必考虑任何不在语言中的符号,并且您一次只匹配一个字,这样您就不会担心单词的开头和结尾,这很容易。

.*?11

我们不情愿地匹配所有内容,直到找到两个连续的1。然后我们知道我们匹配的词是我们感兴趣的词。

然而,我觉得这并没有回答你的问题。有些东西告诉我你的工作风格非常有限,不允许不情愿(尽可能少地与*?匹配),也不允许滥交(匹配&#34;无论如何&#34;与{{1 }})。

相反,请将您的正则表达式视为处于两种可能的状态。第一个是未满足的状态,我们没有匹配两个连续的1,第二个是满意的状态,我们

  1. 只要我们匹配0,或者1跟随0,我们就会保持不满意的状态。这是.
  2. 然后我们匹配两个连续的1并达到满意的状态。这是(0|10)*
  3. 之后,我们可以匹配0和1,并保持满意状态。这是11。如果您有自己喜欢的角色类,则可以使用(0|1)*
  4. 总而言之,我们得到了

    [01]*

    可以在Regex 101上看到这一点。