构造正则表达式以匹配以下语言

Construct a regular expression to match the following language

我正在做我的教授在讲座结束时分发的思维练习。问题是在给定特定语言定义的情况下构建 DFA。在我构建DFA之前,第一个思考练习是将语言定义转换为正则表达式。

提供的字母表为二进制 {0, 1}

语言定义很不正式:

The language defining the set of binary strings in which every sub-string of length 3 has as least one zero

因此,符合此定义的字符串示例为 0000011010 等等。

我的麻烦是想出一个正则表达式来匹配这个语言定义。我尝试在 http://regexr.com/ 上玩,但我只发现 '..0' 匹配每三个字符,末尾为零。我不确定如何按照语言定义的方式匹配每个子字符串,或者是否可能。

有没有办法构造这个问题的正则表达式?

需要横向思维。不要为非正式语言定义实现正则表达式,而是为该定义所暗示的 属性。

剧透(将鼠标悬停在上面以获得解决方案):

提示 1:

如果任何任意 3 长度的子串必须有一个 0-digit,那么不可能连续有 3 个数字是 1-digits.

提示 2:

这意味着在每个 0 位之间最多有 2 个 1 位。

提示 3:

这使它成为一种语言,在 0-2 1 位之后,可能有无限数量的组,由 0 位和 0-2 1 组成-位数。

解决方案:

^1{0,2}(01{0,2})*$,或者更数学地讲,^(11?)?(0(11?)?)*$