正则表达式:字母{0,1}

时间:2015-09-19 01:20:42

标签: regex

我有字母{0,1},我想找到正则表达式(0 + 10)*描述的语言的补充。据我所知,它必须是一个包含除“10”部分之外的任何字符串的字符串,即它可以是空字符串,或包含“00”,“01”或“11”的字符串以及这些字符串的每个组合。我正在遵循的教程给出了这些可能无法解决的解决方案:

1)      (0+1)*11(0+10)* + (0+1)*1
2)      (0+1)*11(0+10)* + (0+10)*1
3)      (0+1)*(1+11)(0+1)*
4)      (0+10)*11(0+10)*

我已经完成了e-NFA,DFA的过程,并回到正则表达式,可以在这里看到:e-NFA, DFA and complemented DFA

由1,2,3和4给出:

1 = {B, C, D, E}
2 = {B, C, D, E, F, H}
3 = {I}
4 = {B, C, D, E, G, H}

这给了我以下补充的正则表达式,它似乎不是上面的1到4附近:

(1+00*1)*(0(1+00*1))* = 0(1+00*1)

我希望有人能澄清一下。提前致谢, 学家

1 个答案:

答案 0 :(得分:0)

因此,一般来说,您必须通过确定性有限自动机来补充正则表达式。 (见this question。)但你可以通过这里的检查来做到这一点。

正则表达式^(0+10)*$匹配空字符串以及以0开头的所有其他二进制字符串,以10结尾,并且在任意对之间至少有两个0 s 1的。{ (我假设正则表达式是要锚定的;如果它匹配包含匹配的所有字符串,这将成为一个更难的问题。)

因此,补语仅包含以1开头,以100结尾的非空二进制字符串,或包括11101的任何位置他们。这是将其编码为正则表达式的一种方法:

(^1|(1|00)$|10?1)

但毫无疑问,更简单的方法。