正则表达式修订
问题描述:
问:鉴于二元字母{0,1}
,写的正则表达式承认,至少有两个连续的“1的所有单词 ,例如0100110
,0111
,00010011001
。正则表达式修订
我的上述问题的回答是:0*{ (0|1)* 11+ }*
答
如果字母是给定的,这样你就不必考虑对于任何不属于该语言的符号,并且您一次匹配单词,这样您就不必担心单词的开始和结束,这很容易。
.*?11
我们不情愿地将所有东西都匹配起来,直到找到两个连续的1。然后,我们知道我们配套的字是一个我们感兴趣的。
然而,给我的感觉,这不回答你的问题。有些东西告诉我你正在使用一种非常有限的味道,不允许勉强(尽可能少地与*?
匹配),也不要滥交(与.
匹配“whatever”)。
所以相反,想想你的正则表达式有两种可能的状态。首先是未满足的状态,我们没有匹配两个连续的1,第二个是满意的状态,我们的有。
- 只要我们匹配0或1然后是0,我们仍然处于不满意的状态。这是
(0|10)*
。 - 然后我们连续两次匹配并达到满意状态。这是
11
。 - 之后,我们可以匹配0和1,并保持满意状态。这是
(0|1)*
。如果你有品味的人物,你可以使用这些,如[01]*
。
全部放在一起,我们得到
(0|10)*11(0|1)*
可以在动作上可见Regex 101。
['[01] * 11 [01] *'](https://regex101.com/r/fF0gK0/1)? –
如果这个问题是关于自动机理论中的正则表达式的话,那么这个网站是http:// cs。stackexchange.com/ –